Mostrando las entradas con la etiqueta Abstract factory. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Abstract factory. Mostrar todas las entradas

28 de julio de 2014

     El patrón Bridge desacopla una abstracción de su implementación, de forma que cada una de ellas pueda variar independientemente.

Aplicabilidad:
  • Desacoplar abstracciones de sus implementaciones permitiendo el cambio en tiempo de ejecución.
  • Necesidad de extender mediante herencia tanto la abstracción como sus implementaciones.
  • El cambio en la implementación de una abstracción no debería afectar a los clientes.
  • Necesidad de compartir una misma implementación.

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



Participantes:
  • Abstracción: Define la interfaz de la abstracción y mantiene la referencia al objeto implementador.
  • Abstracción refinada (AbstraccionRedefinida): Extiende la interfaz definida por la abstracción.
  • Implementador: Define la interfaz para los implementadores concretos. Esta interfaz no tiene porque corresponderse con la interfaz de la abstracción: (Implementador->primitivas, Abstracción->operaciones de alto nivel).
  • Implementador concreto (ImplementadorConcretoA, ImplementadorConcretoB): Implementa la interfaz Implementor definiendo una implementación concreta.

Colaboraciones:
     La abstracción redirige peticiones del cliente al objeto implementador


Concecuencias:
  • Desacoplamiento entre interfaz e implementación:
    • Elimina dependencias de compilación.
    •  Posibilidad de configuración en tiempo de ejecución.
  • Facilita el poder extender independientemente las jerarquías de abstracción e implementación.
  • Oculta los detalles de implementación a los clientes.

Implementación:    
  • Único implementador.
  • Creación del objeto implementador:
    • Si la abstracción conoce la jerarquía de implementadotes, entonces, puede crear el implementador en el constructor en base a sus parámetros.
    • Si la abstracción no conoce la jerarquía de implementadores entonces deberá delegar en otro objeto que se encargue de proporcionarle el implementador concreto, por ejemplo una Factoy.
  • Compartición de implementadores.

Patrones relacionados:
  • Abstract Factory: Permite crear y configurar un "Puente" particular
  • Adapter: Tiene como objetivo hacer trabajar juntas a clases con distinta interfaces, pero en general, se aplica a sistemas que existen. El patrón Bridge se suele aplicar al empezar un diseño, para permitir que las abstracciones e implementadores evolucionen independientemente. 

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!