Este patrón es también conocido cómo Constructor virtual.
Aplicabilidad:
Estructura:
Participantes:
Define un interfaz
para crear un objeto, dejando que sean las subclases quiénes decidan que clase concreta se
debe instanciar.
- No se puede anticipar la clase de objetos que se tienen que crear.
- Una clase quiere que sus subclases especifiquen que objetos se deben crear.
- Clases que delegan la responsabilidad a una de las subclases colaboradoras y se desea localizar el conocimiento de que subclase es la encargada
En la siguiente imagen podemos ver un diagrama UML de este patrón:
Participantes:
- IProducto: Define la interfaz de los objetos creados por el método de fabricación.
- ProductoA y ProductoB: Clases que implementan la interfaz IProducto
- Creador o Factory method: Declara el método de fabricación y opcionalmente puede definir una implementación por defecto que construye un producto concreto.
Colaboraciones:
El creador emplea el método de fabricación
redefinido por sus subclases para utilizar la instancia del producto concreto
apropiada
Concecuencias:
El diseño de este patrón permite
que la decisión de fabricación de un producto que va a ser instanciado se
realice en un solo lugar.
Si el cliente conociera todas las
opciones de creación, las decisiones para eligir que producto crear se
realizarían por todo el código. De esta forma, el cliente solo deberá
preocuparse en la obtención de productos, sin tener en cuenta las subclases que
intervienen en la creación.
También el cliente puede tener más de un creador para los diferentes tipos de productos.
Obtendremos mayor flexibilidad dado que se
proporciona un mecanismo a las subclases para introducir una versión más extendida
del producto.
Desventaja: Puede obligar a extender la clase
creadora sólo para crear un producto concreto. Si esto es un problema puede
emplear otra solución como por ejemplo el patrón Prototype.
Implementación:
Dos variantes:
- El creador es una clase abstracta y no proporciona implementación por defecto para el método (necesario extender al creador)
- El creador es una clase concreta y define un producto concreto por defecto (flexibilidad para cambios futuros).
Métodos de fabricación parametrizados:
Un único método puede crear distintos productos en base a
los parámetros del método de fabricación. (Solución más común.).
Patrones relacionados:
- Abstract Factory: Este patrón suele implementarse con métodos de fabricación.
- Template Method: Los métodos que generalmente son llamados desde adentro del patrón son Template Method.
- Ptrototype: El creador necesita una operación para inicializar la clase producto.