Abstract Factory

24

Click here to load reader

description

ABSTRACT FACTORY DESIGN PATTERN

Transcript of Abstract Factory

Page 1: Abstract Factory

ABSTRACT FACTORY PATTERNDiego Alejandro Henao Calderón

Código: 72917E-mail: [email protected] del Quindío

Page 2: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

2

Contenido1. Introducción2. Propósito3. También conocido como…4. Motivación5. Aplicabilidad6. Estructura7. Participantes8. Colaboraciones9. Consecuencias10. Implementación11. Código de ejemplo12. Usos conocidos13. Patrones relacionados14. Conclusiones

Page 3: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

3

Introducción

El Patrón Abstract Factory toma el mismo concepto de Factory Method pero al próximo nivel. En términos simples, un Abstract Factory es una clase que provee una interfaz para producir una familia de objetos. En el lenguaje de programación Java, esto se puede implementar o bien con una interfaz o con una clase abstracta.

Page 4: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

4

Propósito

Provee una interfaz para la creación de familias relacionadas o objetos dependientes sin especificar sus clases concretas. Por ejemplo para la creación de widgets o interfaces gráficas multiplataforma (SO Diferentes)

Page 5: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

5

También conocido como…

Kit

Foto: http://gpwiki.org/images/b/b1/AbstractFactoryPatternUMLDiagram.png

Page 6: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

6

Motivación (1 de 4)

Su objetivo es soportar múltiples estándares (MS-Windows, Motif, Open Look,…).

Extensible para futuros estándares. Restricciones: cambiar el Look-and-Feel

sin recompilar y cambiar el Look-and-Feel en tiempo de ejecución.

Page 7: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

7

Motivacion (2 de 4)Ejemplo de partida: Creación de Widgets en

aplicación cliente. Un armazón para interfaces gráficas que soporte

distintos tipos de presentación (look-and-feel). Las aplicaciones cliente no deben cambiar porque

cambie el aspecto de la interfaz de usuario. Los clientes no son conscientes de las clases

concretas, sino sólo de las abstractas. Sin embargo los WidgetFactory imponen

dependencias entre las clases concretas de los Widgets que contiene.

Page 8: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

8

Ejemplo de Motivacion (3 de 4)

Page 9: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

9

Ejemplo de motivacion (4 de 4)

Problema: Las aplicaciones clientes NO deben crear sus widgets para un Look-and-Feel concreto.

Scrollbar *sb = new MotifScrollBar();

Menu *menu = new MotifMenu();

Solución: Abstraer el proceso de creación de widgets. En lugar de:

Scrollbar *sb = new MotifScrollBar();

Usar:

Scrollbar *sb = WidgetFactory->CreateScrollBar();

WidgetFactoryWidgetFactory será una instancia de de MotifWidgetFactoryMotifWidgetFactory

Page 10: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

10

Aplicaciones Un sistema debe ser

independiente de los procesos de creación, composición y representación de sus productos.

Un sistema debe ser configurado con una familia múltiple de productos.

Una familia de productos relacionados se ha diseñado para ser usados conjuntamente (y es necesario reforzar esta restricción).

Se quiere proporcionar una librería de productos y no revelar su implementación (simplemente revelando sus interfaces).

Page 11: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

11

Estructura Foto: http://www.gsong.pe.kr/tt/attach/1/1618012864.png

Page 12: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

12

Participantes AbstractFactory (WidgetFactory): Declara un interfaz

para las operaciones de creación de objetos de productos abstractos

ConcreteFactory (MotifWidgetFactory, PMWidgetFactory): Implementa las operaciones para la creación de objetos de productos concretos.

AbstractProduct (Window, ScrollBar): Declara una interfaz para los objetos de un tipo de productos.

ConcreteProduct (MotifWindow, MotifScrollBar): Define un objeto de producto que creará la correspondiente Concrete Factory, a la vez que implementa la interfaz de AbstractProduct.

Client: Usa solamente las interfaces declaradas por las clases AbstractFactory y AbstractProduct.

Page 13: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

13

Colaboraciones

Normalmente una única instancia de cada ConcreteFactory es creada en tiempo de ejecución. Esta concrete factory crea productos teniendo una implementación particular. Para crear diferentes productos de objetos, los clientes deben usar diferentes concrete factory

AbstractFactory delega la creación de productos a sus subclases ConcreteFactory.

Page 14: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

14

Consecuencias (1 de 2)

Ventajas: Aísla las clases de implementación: ayuda a

controlar los objetos que se creen y encapsula la responsabilidad y el proceso de creación de objetos producto. (código del cliente)

Hace fácil el intercambio de familias de productos sin mezclarse, permitiendo configurar un sistema con una de entre varias familias de productos: cambio de factory cambio de familia.

Fomenta la consistencia entre productos.

Page 15: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

15

Consecuencias (2 de 2)

Desventajas: Soportar nuevas clases de productos es

difícil. Porque la interfaz del Abstract Factory arregla el bloque de productos que pueden ser creados. Para soportar nuevas clases se requiere extender la interfaz factory. (cambios en AF clases y subclases) Posible Solución:

Pasarle un parámetro a los métodos de creación de productos clase abstracta común necesidad de downcast solución no segura.

Page 16: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

16

Implementacion (Tecnicas AF Pattern) Factorías como singletons:

Sólo una instancia de ConcreteFactory por familia de productos. (Mejor implementado a través de Singleton)

Creacion de productos: Utilizando un Factory Method para cada producto. Requiere de varias Concrete Factory subclase por cada familia de productos. Cuando hay varias familias de productos -> Prototype

Definir factorías extensibles: Añadiendo un parámetro en las operaciones de

creación que indique el tipo de objeto a crear: mas flexible y menos seguro.

Page 17: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

17

Código de Ejemplo (1 de 3)

foto: http://blog.dotnetstyling.com/archive/2007/11/25/Abstract-Factory-Design-Pattern.aspx

Page 18: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

18

Ejemplo de Código (2 de 3)

foto: http://blog.dotnetstyling.com/archive/2007/11/25/Abstract-Factory-Design-Pattern.aspx

Page 19: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

19

Ejemplo de Código (3 de 3)

foto: http://blog.dotnetstyling.com/archive/2007/11/25/Abstract-Factory-Design-Pattern.aspx

Page 20: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

20

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.

Foto: http://alumni.media.mit.edu/~tpminka/patterns/ET++/mirror.gif

Page 21: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

21

Patrones relacionados

Se pueden implementar con Factory Method o Prototype.

Las factorías concretas suelen ser Singleton

Foto: http://upload.wikimedia.org/wikipedia/commons/archive/e/ed/20061219215908!Factory_Method_UML_class_diagram.png

Foto: http://cvs.m17n.org/~akr/mj/design-pattern/fig-GoF/PNG/singleton.png

Page 22: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

22

Conclusiones Una situación en la que el programa maneja un tipo de

objetos con unas características comunes y algunas características propias. Esto en general en software se resuelve mediante el uso de dos características de los lenguajes de programación orientados a objetos, las clases abstractas y los interfaces.

El patrón de diseño Abstract Factory aborda el problema de la creación de familias de objetos (como por ejemplo interfaces gráficos) que comparten toda una serie de características comunes en los objetos que componen dichas familias.

El uso de este patrón está recomendado para situaciones en las que tenemos una familia de productos concretos y prevemos la inclusión de distintas familias de productos en un futuro.

Page 23: Abstract Factory

Abstract Factory - Herramientas de Productividad 2008(1)

23

Bibliografía Cano F.P., Gonzalez R. & Zamora R. Abstract Factory. Obtenido el 10 de Marzo

de 2008 desde: [http://kybele.escet.urjc.es/documentos/SI/Patrones/01_Abstract%20Factory.ppt#257,4,Definición del Abstract Factory]

Abstract Factory. (WIKIPEDIA, 2008). Obtenido el 10de Marzo de 2008 desde: http://es.wikipedia.org/wiki/Abstract_Factory_(patr%C3%B3n_de_dise%C3%B1o)

Patrones de diseño - abstract factory (introduccion) Obtenido el 10de Marzo de 2008 desde: http://www.thealphasite.org/articulos/patrones_de_diseno_abstract_factory

Gamma E., Helm R., Johnson R., Vlissides J. (1995) Abstract Factory. Design Patterns: Elements of Reusable Object-Oriented Software. Ed.: Addison-Wesley.

http://gpwiki.org/images/b/b1/AbstractFactoryPatternUMLDiagram.png http://www.tml.tkk.fi/~pnr/GoF-models/gif/Abstract-factory.gif Abstract Factory Design Pattern (2008). Obtenido el 10 de Marzo de 2008

desde: http://blog.dotnetstyling.com/archive/2007/11/25/Abstract-Factory-Design-Pattern.aspx

Page 24: Abstract Factory

Gracias.

Preguntas?

ABSTRACT FACTORY – DIEGO ALEJANDRO HENAO CALDERON