Está en la página 1de 24

| ||

|

u 
   
 


 
  

 


!
"
 
1. Introducción
2. Propósito
3. También conocido como«
4. Motivación
5. Aplicabilidad
6. Estructura
7. Participantes
8. Colaboraciones
9. Consecuencias
10. Implementación
11. Código de ejemplo
12. Usos conocidos
13. Patrones relacionados
14. Conclusiones

|  
   
 


' 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.

|  
   
 


' 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)

|  
   
 
! " #

' ‰it

›  
  ›     

|  
   

% 

' 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.

|  
   
 $
% 
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.

|  
   
 &
'( ) % 

|  
   
 
'( )   
' a # Las aplicaciones clientes NO deben crear sus
widgets para un Look-and-Feel concreto.
p  
 p 


 
 

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

Usar:
p      p 
ü 
será una instancia


(
( ü 

|  
   
 *
|) 
' 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).
|  
   
 
' ›     
 

|  
   
 
 
' |   (WidgetFactory): Declara un interfaz
para las operaciones de creación de objetos de
productos abstractos
' 
    (MotifWidgetFactory,
PMWidgetFactory): Implementa las operaciones para la
creación de objetos de productos concretos.
' |   (Window, ScrollBar): Declara una
interfaz para los objetos de un tipo de productos.
' 
    (MotifWindow, MotifScrollBar): Define
un objeto de producto que creará la correspondiente
m   , a la vez que implementa la interfaz de

  .
' 
: Usa solamente las interfaces declaradas por las
clases
  y
  .

|  
   
 
)  

' Normalmente una única instancia de cada



    es creada en tiempo de
ejecución. Esta    crea
productos teniendo una implementación
particular. Para crear diferentes productos de
objetos, los clientes deben usar diferentes
  
' |   delega la creación de
productos a sus subclases 
   

|  
   
 
   

' *entajas:
 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.

|  
   
 
   

' 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.
|  
   
 
 ) ! | 
'        
 Sólo una instancia de ConcreteFactory por familia

de productos. (Mejor implementado a través de


Singleton)
' m    Utilizando un    
para cada producto. Requiere de varias Concrete
Factory subclase por cada familia de productos.
Cuando hay varias familias de productos -> Prototype
' u     
 Añadiendo un parámetro en las operaciones de
creación que indique el tipo de objeto a crear: mas
flexible y menos seguro.

|  
   
 $
+ '( ) 

-  !  " !     #$% &› & &


  '

|  
   
 &
'( ) + 

-  !  " !     #$% &› & &


  '

|  
   
 
'( ) + 

-  !  " !     #$% &› & &


  '

|  
   
 *
,
' ET++ usa Abstract
Factory para archivar
portablemente sobre
diferentes sistemas
windows (X Windows y
Sun*iew)
' La clase base abstracta
de WindowsSystem
define la interfaz para
›  !(  "   "() 
 *+,,  -
crear objetos que
representan recursos del
sistema windows.

|  
   
 
  )

' Se pueden implementar


con Factory Method o
Prototype.
›  
(! " 
"  
"    #"
-%-.› / "//!/"   

' Las factorías concretas


suelen ser Singleton

›  # $ )


 0" & - &
1 ›21 !  

|  
   
 
) 
' 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,  
  #   $   % .
' 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.

|  
   
 
- )+./
' Cano F.P., Gonzalez R. & Zamora R.
  . Obtenido el 10 de Marzo
de 2008 desde:
[http://kybele.escet.urjc.es/documentos/SI/Patrones/01_Abstract%20Factory.p
pt#257,4,Definición del Abstract Factory]

' Abstract Factory. (WI‰IPEDIA, 2008). Obtenido el 10de Marzo de 2008 desde:
http://es.wikipedia.org/wiki/Abstract_Factory_(patr%C3%B3n_de_dise%C3%B
1o)

' 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., *lissides 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

|  
   
 
> 

a   &

| ||
| |
 ||


También podría gustarte