2 de julio de 2014

     Este patrón es también conocido cómo Constructor virtual.
     Define un interfaz para crear un objeto, dejando que sean las subclases quiénes decidan que clase concreta se debe instanciar. 


Aplicabilidad:
  • 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

Estructura:
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.





Subscribe to RSS Feed Follow me on Twitter!