2. 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.
3. Motivación
• Su objetivo es soportar múltiples estándares.
• Extensible para futuros estándares.
• Separar la construcción de un objeto complejo de su
representación de modo que el mismo proceso de
construcción pueda crear diferentes
representaciones. Los objetos que dependen de un
algoritmo tendrán que cambiar cuando el algoritmo
cambia. Por lo tanto los algoritmos que estén
expuestos a dicho cambio deberían ser separados,
permitiendo de esta manera reutilizar algoritmos
para crear diferentes representaciones.
4. APLICABILIDAD
• Para sistemas independientes de cómo se
crean, componen y representan sus productos
• Para sistemas que pueden configurarse con
una de varias familias de productos
• Una familia de objetos producto relacionados
está diseñada para ser usada conjuntamente y
es necesario hacer cumplir esa restricción.
• Para ofrecer una librería de clases, mostrando
sólo sus interfaces y no sus implementaciones.
7. Participantes
o AbstractFactory. Declara una interfaz para operaciones que
crean objetos producto abstractos.
o ConcreteFactory. Implementa las operaciones para crear
objetos producto concretos.
o AbstractProduct. Declara una interfaz para un tipo de objeto
producto.
o Product. Define un objeto producto para que sea creado por la
fábrica correspondiente. Implementa la interface Product.
o Client. Sólo usa interfaces declaradas por las clases
AbstractFactory y AbstractProduct.
8. 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.
9. Consecuencias
o 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 una
familia completa de objetos con una factoría abstracta, es fácil
cambiar toda la familia de una vez simplemente cambiando la
factoría concreta.
o Promueve la consistencia entre productos. El uso de la
factoría abstracta permite forzar a utilizar un conjunto de objetos
de una misma familia.
o No es fácil soportar nuevos tipos de productos.
(Desventaja). Si se tiene que extender la interfaz de la Factoría
abstracta.
10. Implementación
o Fábricas como Singletons: normalmente se usa una
sola instancia de fábrica concreta.
o Creación de productos: la fábrica abstracta deja que
las subclases creen los productos redefiniendo las
operaciones de creación.
o Definir fábricas extensibles: para evitar la
dependencia de la interfaz de las fábricas de los
nuevos productos se puede tener un catálogo de
prototipos.
11. Usos Conocidos
• ET++ usa Abstract Factory para archivar portablemente
sobre diferentes sistemas windows (X Windows y
SunView)
• La clase base abstracta de WindowsSystem define la
interfaz para crear objetos que representan recursos del
sistema windows.
• Las clases Button y MenuItem de Java facilitan la
utilización de este patrón, declaran los métodos
getActionCommand y setActionCommand para dar
nombres a las acciones realizadas por los objetos,
facilitándose una correspondencia entre ambos.
12. 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
13. 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