1. Patrones de Diseño – Abstract
Factory
Provee una interface para la creación de familias de objetos relacionados o dependientes
●
sin especificar sus clases concretas.
También conocido como Kit.
●
Se usa cuando :
Un sistema debería ser independiente de cómo sus objetos producto son creados,
●
compuestos y representados
Un sistema debería ser configurado con una de múltiples familias de objetos producto.
●
Un familia de objetos producto relacionados están diseñados para trabajar juntos y se
●
necesita cumplir con esa restricción.
Se quiere proveer de una librería de clases de objetos producto y se requiere revelar
●
sólo sus interfaces y no sus implementaciones.
Un ejemplo de uso relativamente común de da en la creación de familias de
interfaces gráficas que soporten distintos tipos de presentación(look-and-feel).
3. Patrones de Diseño – Abstract
Factory
Participantes :
AbstractFactory : Declara una interfaz para operaciones que crean objetos producto
●
abstractos.
ConcreteFactory : Implementa las operaciones que crean objetos producto concretos.
●
AbstractProduct : Declara una interface para un tipo de objeto producto.
●
ConcreteProduct, Product : Define un objeto producto que será creado por el
●
correspondiente ConcreteFactory.
Client : Usa sólo interfaces declaradas por AbstractFactory y AbstractProduct.
●
Colaboraciones :
Normalmente una única instancia de ConcreteFactory es creada en tiempo de ejecución.
●
Para crear diferentes objetos producto, los clientes deben usar diferentes
●
ConcreteFactory.
AbstractFactory delega la creación de objetos producto a sus subclases
●
ConcreteFactory.
ConcreteFactory crea objetos producto teniendo una implementación particular.
●
4. Patrones de Diseño – Abstract
Factory
Consecuencias :
Aisla las clases concretas.
●
Ayuda a controlar las clases de objetos que una aplicación crea.
●
Encapsula la responsabilidad y el proceso de creación de los objetos producto, aislando
●
a los clientes de la implementación de clases.
El cliente manipula las instancias a través de sus interfaces abstractas.
●
Hace fácil el intercambio de familias de objetos producto sin mezclarse, permitiendo
●
configurar un sistema con una familia de objetos producto de entre varias.
Promueve la consistencia entre objetos producto.
●
Soporte para nuevos tipos de objetos producto es difícil, dado que la interface
●
AbstractFactory arregla el bloque de productos que pueden ser creados.
Para soportar nuevos tipos de objetos producto seria necesario hacer cambios o
●
extender AbstractFactory y sus subclases.
Una posible solución consistiría en pasar un parámetro al método de creación de
●
objetos producto, sin embargo se considera una técnica no segura.