2 de julio de 2014

     Define una interfaz para la creación de familias de objetos relacionados sin especificar sus clases concretas.


Aplicabilidad:
  • Un sistema debe ser independiente de la forma en que sus productos son creados, compuestos y representados.
  • Un sistema debe ser configurado con una de muchas familias de productos disponibles.
  • Una familia de productos son diseñados para su uso conjunto, y se requiere asegurar este uso conjunto.
  • Se desea proporcionar una biblioteca de productos presentando su interfaz, pero no su implementación

Estructura:
En la siguiente imagen podemos ver un diagrama UML de este patrón:




Participantes:
  • Fábrica abstracta (IFabrica): Declara la interfaz para las operaciones que crean productos abstractos (métodos de fabricación)
  • Fábrica concreta (Fabrica1, Fabrica2): Implementa los métodos de fabricación de productos concretos.
  • Producto abstracto (IProductoA, IProductoB): Declara la interfaz utilizada por el cliente para un tipo de producto concreto.
  • Producto concreto (ProductoA1, ProductoA2, ProductoB1, ProductoB2): Define un producto creado por el método de fabricación de una fábrica concreta. Implementa la interfaz del producto abstracto.
  • Cliente: Usa sólo las interfaces declaradas por la fábrica abstracta y los productos abstractos.

Colaboraciones:
     Normalmente se crea una única fábrica concreta que se encarga de crear los productos concretos, mientras que la fábrica abstracta difiere la creación de productos a sus subclases.


Concecuencias:
  • Aísla clases concretas (No aparecen en el código del cliente).
  • Facilita el intercambio de familias de productos.
  • Simplifica la consistencia entre productos.
  • Difícil de añadir nuevas clases de productos.

Implementación:
  • Las fábricas usualmente suelen se instancias únicas.
  • La creación de productos puede realizarse por el método de fabricación habitual o mediante el patrón prototipo para evitar extender la fábrica abstracta.
  • Flexibilizar la fábrica mediante la parametrización del método de fabricación:
    • El método de fabricación puede crear diferentes tipos de componentes en base a los parámetros del método.
    • El cliente debe realizar una conversión tras crear el producto (downcasting).
    • En la mayoría de los lenguajes no hay ninguna relación formal entre valores de los parámetros y productos creados, exceptuando el código fuente.

Patrones relacionados:
  • Factory Method o Prototype: El patrón Factory Abstract suele implementarse con métodos de fabricación, de la misma forma, puede implementarse con el patrón Prototype.
  • Singleton: Generalmente una fábrica concreta suele ser un Singleton.

    Subscribe to RSS Feed Follow me on Twitter!