Download - Abstract Factory
ABSTRACT FACTORY PATTERN
Juan Lizaldes
Gabriel Requelme
Introducción
Abstract Factory es una clase que provee un medio para
producir una familia de objetos. Es un patrón de diseño para
el desarrollo de software. También conocido como Kit o
Toolkit.
PROPÓSITO
Provee una interfaz para la creación de objetos relacionados
o dependientes, sin especificar sus clases concretas.
Motivación• Su objetivo es soportar múltiples estándares.
• Extensible para futuros estándares.
• Separar la construcción de un objeto complejo de surepresentación de modo que el mismo proceso deconstrucción pueda crear diferentesrepresentaciones. Los objetos que dependen de unalgoritmo tendrán que cambiar cuando el algoritmocambia. Por lo tanto los algoritmos que esténexpuestos a dicho cambio deberían ser separados,permitiendo de esta manera reutilizar algoritmospara crear diferentes representaciones.
APLICABILIDAD
• Para sistemas independientes de cómo secrean, componen y representan sus productos
• Para sistemas que pueden configurarse conuna de varias familias de productos
• Una familia de objetos producto relacionadosestá diseñada para ser usada conjuntamente yes necesario hacer cumplir esa restricción.
• Para ofrecer una librería de clases, mostrandosólo sus interfaces y no sus implementaciones.
Estructura
Participanteso AbstractFactory. Declara una interfaz para operaciones que
crean objetos producto abstractos.
o ConcreteFactory. Implementa las operaciones para crearobjetos producto concretos.
o AbstractProduct. Declara una interfaz para un tipo de objetoproducto.
o Product. Define un objeto producto para que sea creado por lafábrica correspondiente. Implementa la interface Product.
o Client. Sólo usa interfaces declaradas por las clasesAbstractFactory y AbstractProduct.
Colaboraciones• Normalmente se crea una única instancia de la clase
ConcreteFactory que crea productos con una
implementación particular.
• Para crear familias de productos diferentes los
clientes utilizan una determinada fábrica concreta.
• La clase AbstractFactory pospone la creación de
productos a sus subclases ConcreteFactory.
Consecuenciaso Aísla las clases concretas. Los clientes manipulan los objetos
a través de las interfaces o clases abstractas.
o Facilita el intercambio de familias de productos. Al crear unafamilia completa de objetos con una factoría abstracta, es fácilcambiar toda la familia de una vez simplemente cambiando lafactoría concreta.
o Promueve la consistencia entre productos. El uso de lafactoría abstracta permite forzar a utilizar un conjunto de objetosde una misma familia.
o No es fácil soportar nuevos tipos de productos.(Desventaja). Si se tiene que extender la interfaz de la Factoríaabstracta.
Implementación
o Fábricas como Singletons: normalmente se usa unasola instancia de fábrica concreta.
o Creación de productos: la fábrica abstracta deja quelas subclases creen los productos redefiniendo lasoperaciones de creación.
o Definir fábricas extensibles: para evitar ladependencia de la interfaz de las fábricas de losnuevos productos se puede tener un catálogo deprototipos.
Usos Conocidos
• ET++ usa Abstract Factory para archivar portablementesobre diferentes sistemas windows (X Windows ySunView)
• La clase base abstracta de WindowsSystem define lainterfaz para crear objetos que representan recursos delsistema windows.
• Las clases Button y MenuItem de Java facilitan lautilización de este patrón, declaran los métodosgetActionCommand y setActionCommand para darnombres a las acciones realizadas por los objetos,facilitándose una correspondencia entre ambos.
Patrones relacionados
• Se pueden implementar con Factory
Method o Prototype.
• Las factorías concretas suelen ser
Singleton.
CÓDIGO DE EJEMPLO
http://www.mediafire.com/?8cngd0n88r4wia4
Bibliografía• Gamma, E., Helm, R., Johnson, R., y Vlissides, J.: Design Patterns:
Elements of Reusable Object-Oriented Software. Addison-Wesley (1995)
• http://www.dosideas.com/wiki/Abstract_Factory
• http://www.programadorphp.org/blog/patrones-de-diseno-elementos-reutilizables-para-la-web/
• http://antares.itmorelia.edu.mx/~jcolivar/courses/dp07a/patrones.pdf
• http://gresh-ross.blogspot.es/
• http://www.fdi.ucm.es/profesor/fpeinado/courses/oop/LPS-06IntroPatrones-B&N.pdf
• http://www.fdi.ucm.es/profesor/jpavon/poo/2.14PDOO.pdf
• http://msdn.microsoft.com/es-mx/library/bb972258.aspx#EDAA
• http://www.apwebco.com/gofpatterns/creational/AbstractFactory.html