Abstract Factory -Design Pattern - GoF
Transcript of Abstract Factory -Design Pattern - GoF
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).
Patrones de Diseño – Abstract Factory
Estructura :
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.
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.