mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-10-03 09:13:27 +00:00
* Typo corrections * bridge pattern translated to spanish * builder pattern translated to spanish * context-object pattern translated to spanish * converter pattern translated to spanish * dependency injection pattern translated to spanish * factory pattern translated to spanish * factory-kit pattern translated to spanish * factory-method pattern translated to spanish * monostate pattern translated to spanish * multiton pattern translated to spanish * object mother pattern translated to spanish * object pool pattern translated to spanish * property pattern translated to spanish * prototype pattern translated to spanish * registry pattern translated to spanish * step builder pattern translated to spanish * value object pattern translated to spanish * typo corrections and resources urls refactor * grammar corrections * Add image to each pattern --------- Co-authored-by: luismateoh <luismateohm@gmail.com> Co-authored-by: luis.hincapie <luis.hincapie@blankfactor.com>
This commit is contained in:
62 files changed
+2307
-78
No files matched your search
@@ -1,9 +1,6 @@
|
||||
---
|
||||
layout: pattern
|
||||
title: Abstract Factory
|
||||
folder: abstract-factory
|
||||
permalink: /patterns/abstract-factory/
|
||||
categories: Creational
|
||||
category: Creational
|
||||
language: es
|
||||
tag:
|
||||
- Gang of Four
|
||||
@@ -21,11 +18,11 @@ Proveer de una interfaz para crear familias de objetos relacionados dependientes
|
||||
|
||||
Ejemplo del mundo real
|
||||
|
||||
> Para crear un reino necesitamos objetos con una temática común. El reino élfico necesita un rey elfo, un castillo élfico y un ejército élfico mientras que el reino orco necesita un rey orco, un castillo orco y un ejércico orco. Hay una dependencia entre los objetos del reino.
|
||||
> Para crear un reino necesitamos objetos con una temática común. El reino élfico necesita un rey elfo, un castillo élfico y un ejército élfico mientras que el reino orco necesita un rey orco, un castillo orco y un ejército orco. Hay una dependencia entre los objetos del reino.
|
||||
|
||||
Dicho de otra forma
|
||||
|
||||
> Una factoría de factorías; una factoría que agrupa otras factorias individuales pero relacionadas/dependientes sin especificar su clase concreta.
|
||||
> Una factoría de factorías; una factoría que agrupa otras factorías individuales pero relacionadas/dependientes sin especificar su clase concreta.
|
||||
|
||||
Según Wikipedia
|
||||
|
||||
@@ -33,7 +30,7 @@ Según Wikipedia
|
||||
|
||||
**Ejemplo Programático**
|
||||
|
||||
Traduciendo el ejemplo anterior sobre los reinos. Primero tenemos algunas interfaces e implementaciones de los objetos del reino.
|
||||
Traduciendo el ejemplo anterior sobre los reinos. Primero tenemos algunas interfaces e implementaciones de los objetos del `Castle`.
|
||||
|
||||
```java
|
||||
public interface Castle {
|
||||
@@ -75,7 +72,7 @@ public class ElfArmy implements Army {
|
||||
|
||||
```
|
||||
|
||||
Luego tenemos la abstracción e implementación de la factoría del reino.
|
||||
Luego tenemos la abstracción e implementación de la factoría del reino `KingdomFactory`.
|
||||
|
||||
```java
|
||||
public interface KingdomFactory {
|
||||
@@ -121,7 +118,7 @@ public class OrcKingdomFactory implements KingdomFactory {
|
||||
}
|
||||
```
|
||||
|
||||
Ahora tenemos la factoría abstracta que nos permite hacer familias de objetos relacionados por ejemplo la factoria del reino élfico crea el castillo, rey y ejercito élficos etc.
|
||||
Ahora tenemos la factoría abstracta que nos permite hacer familias de objetos relacionados por ejemplo la factoría del reino élfico `ElfKingdomFactory` crea el castillo `castle`, rey `king` y ejército `army` etc.
|
||||
|
||||
|
||||
```java
|
||||
@@ -135,7 +132,7 @@ king.getDescription();
|
||||
army.getDescription();
|
||||
```
|
||||
|
||||
Output del programa:
|
||||
Salida del programa:
|
||||
|
||||
```java
|
||||
This is the elven castle!
|
||||
@@ -180,7 +177,7 @@ public static class FactoryMaker {
|
||||
|
||||
## Diagrama de clases
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
## Aplicación
|
||||
@@ -191,24 +188,24 @@ Usar el patrón Abstract Factory cuando
|
||||
* El sistema debe ser configurado con una de las múltiples familias de productos.
|
||||
* La familia de objetos relacionados está diseñada para ser usada en conjunto y necesitas forzar esta premisa.
|
||||
* Quieres proveer de una librería de productos y solo quieres revelar sus interfaces, no su implementación.
|
||||
* El tiempo de vida de la dependencia es conceptualmente mas corte que el del cliente.
|
||||
* El tiempo de vida de la dependencia es conceptualmente más corto que el del cliente.
|
||||
* Necesitas un valor en tiempo de ejecución para construir una dependencia.
|
||||
* Quieres decidir que producto de una familia llamar en tiempo de ejecución.
|
||||
* Necesitas proveer de uno o mas parámetros solo conocidos en tiempo de ejecución antes de poder resolver la dependencia.
|
||||
* Necesitas proveer de uno o más parámetros solo conocidos en tiempo de ejecución antes de poder resolver la dependencia.
|
||||
* Necesitas consistencia entre productos.
|
||||
* No quieres cambiar el código existente al añadir nuevos productos o familias de productos al programa.
|
||||
|
||||
Ejemplos de casos de uso
|
||||
|
||||
* Elegir llamar a la implementación correcta de FileSystemAcmeService o DatabaseAcmeService o NetworkAcmeService en tiempo de ejecución.
|
||||
* Escribir test unitarios se hace mucho mas sencillo.
|
||||
* Escribir test unitarios se hace mucho más sencillo.
|
||||
* Herramientas UI (User Interface) para diferentes SO (Sistemas Operativos).
|
||||
|
||||
## Consecuencias
|
||||
|
||||
* La inyección de dependencias en java esconde las dependencias de la clase servicio lo que puede llevar a errores de ejecución que se podrian haber evitado al compilar.
|
||||
* La inyección de dependencias en java esconde las dependencias de la clase servicio lo que puede llevar a errores de ejecución que se podrían haber evitado al compilar.
|
||||
* Mientras que el patrón es muy bueno creando objetos predefinidos, añadir nuevos puede ser complicado.
|
||||
* El código es mas complicado de lo que deberia porque se añaden muchas interfaces y clases nuevas junto con el patrón.
|
||||
* El código es más complicado de lo que debería porque se añaden muchas interfaces y clases nuevas junto con el patrón.
|
||||
|
||||
## Tutoriales
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 80 KiB |
Reference in new issue
Block a user