abstract factory

Post on 04-Jul-2015

1.513 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related