Está en la página 1de 78

PATRONES DE DISEO

Diseo de Sistemas
UNMSM-EAPIS

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones

En las distintas actividades de la vida diaria se reconocen patrones:


Trabajo Vida familiar Hobbies

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Hardware

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

habitualmente

Hardware

Software

Poder rehusar componentes y lograr un mantenimiento fcil. Lograr un software flexible

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Problema

Solucin

Patrones de diseo
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2

Patrones de diseo
Son descripciones de clases y objetos relacionados que estn adaptados para resolver un problema de diseo general en un contexto determinado. Erich Gamma, Richard Helm, John Vlissides y Ralph Johnson

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo
Ingeniero Resuelve problemas Aplicando estndares

Las buenas soluciones permanecen, las malas se rechazan. . ingenieros deben conocer y saber aplicar los estndares conocidos Los
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo
Se definen con un alto nivel de abstraccin. Son independientes de los lenguajes de programacin y de los detalles de implementacin. Los patrones promueven y facilitan la reutilizacin de arquitecturas y diseos de software que han demostrado su validez en muchas aplicaciones.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Arquitectura
1. 2. 3.

Define la forma y la estructura de la aplicacin de software. Relacionada al propsito de la aplicacin. Arquitectura de mdulos y sus interconexiones

Patrones de diseo
9
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Paquetes, componentes, clases


Nehil M.C. 2012-2

Evidencias de diseo errneo


Rigidez: problemas para insertar algn cambio. Fragilidad: el software falla en muchos lugares al insertar

un cambio. Inmovilidad: no se pueden rehusar partes del proyecto. Viscosidad:

o De diseo: cuando se deben hacer cambios, es ms fcil hacer cosas mal, que bien. o De entorno: entorno de desarrollo ineficiente

10

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Cambios de requerimientos
Los cambios en un diseo de software, si no fueron

cambios previstos en el diseo original, degradan el mismo. Incluyen dependencias. Generalmente lo hacen ingenieros que no estaban relacionados con la filosofa de diseo original.

11

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo
Erich Gamma, Richard Helm, John Vlissides y Ralph Johnson Design Patterns. 1994

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo
Describe una estructura dentro de la cual catalogar y describir patrones Cataloga 23 patrones Destaca estrategias y aproximaciones basadas en el diseo de patrones

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo
No crearon los patrones descriptos en el libro. Los descubrieron como existentes dentro de la comunidad del software

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo
Porque estudiar patrones de diseo Reuso de soluciones de diseo. Establecer terminologa comn. Dan una perspectiva de alto nivel sobre el anlisis y diseo.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Que resuelve un patrn de diseo?

Patrn de diseo: proporciona un esquema para refinar los subsistemas o componentes de un sistema de software, o las relaciones entre ellos. Describe estructuras repetitivas de comunicacin de componentes que resuelven un problema de diseo en un contexto particular

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo
Programe para una interfaz, no para una implementacin.

Comience cualquier jerarqua que necesite para solucionar su problema con una clase abstracta, sin implementacin de mtodos. Que solo describa los mtodos que debe soportar.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo
Favorecer la composicin frente a la herencia de clases.

Construir objetos que contengan otros objetos. No cargue con todo el peso de heredar mtodos que no necesita

18

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo

Encuentre lo que vara y encapslelo.

Lo que puede ser cambiado en su diseo encapslelo en una clase , para no tener necesidad de redisear.

19

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo
Herencia de clases Ventajas Se define estticamente Fcil modificacin de la implementacin Desventajas No se cambian implementaciones en tiempo de ejecucin Rompe encapsulamiento

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo
Composicin de objetos Ventajas Se define dinmicamente No se rompe encapsulamiento

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo
Que debera ser variable en su diseo

Que puede ser cambiado en su diseo, sin necesidad de redisear. Encapsule lo que puede variar. Distintos algoritmos de ordenacin de arreglos

Encapsule cada algoritmo en una clase

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo
Manipular objetos en funcin de la interfaz definida por la clase abstracta, de la cual extiende, tiene dos ventajas:

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de diseo

Los clientes no tienen que conocer los tipos especficos de los objetos que usan, basta con que estos cumplan con la interfaz que esperan los clientes.

Los clientes desconocen las clases que implementan dichos objetos; slo conocen la clase abstracta que define la interfaz.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2

Patrones de diseo
1. 2. 3.

Aceptarlos Reconocerlos Internalizarlos

25

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Clasificacin de patrones (GoF)


Patrones de creacin: Tratan de la inicializacin y configuracin de

clases y objetos.
Patrones

estructurales: Tratan implementacin de clases y objetos.

de

desacoplar

interfaz

Patrones de comportamiento: Tratan de las interacciones dinmicas

entre sociedades de clases y objetos

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de creacin
The Factory Method retorna una de las posibles subclases de una clase

abstracta dependiendo de los datos que se le provee. The Abstract Factory Method retorna una de las varias familias de objetos. The Builder Pattern separa la construccin de un objeto complejo de su representacin. Varias representaciones se pueden crear dependiendo de las necesidades del programa. The Prototype Pattern inicializa e instancia una clase y luego copia o clona si necesita otras instancias, mas que crear nuevas instancias. The Singleton Pattern es una clase de la cual no puede existir mas de una instancia.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones estructurales
Adapter: cambia la interfaz de una clase a la de otra. Bridge: permite mantener constante la interfaz que se presenta al

cliente, cambiando la clase que se usa Composite: una coleccin de objetos Decorator: una clase que envuelve a una clase dndole nuevas capacidades. Facade: rene una jerarqua compleja de objetos y provee una clase nueva permitiendo acceder a cualquiera de las clases de la jerarqua . Flyweight: permite limitar la proliferacin de pequeas clases similares.

28

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Patrones de comportamiento
Cadena de responsabilidad: permite que un conjunto de clases intenten

manejar un requerimiento. Interpreter: define una gramtica de un lenguaje y usa esa gramtica para interpretar sentencias del lenguaje. Iterator: permite recorrer una estructura de datos sin conocer detalles de cmo estn implementados los datos Observer: algunos objetos reflejan un cambio a raz del cambio de otro, por lo tanto se le debe comunicar el cambio de este ltimo. Strategy: cantidad de algoritmos relacionados encerrados en un contexto a travs del cual se selecciona uno de los algoritmos.

29

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Otros tipos de patrones


Patrones de programacin concurrente Patrones de interfaz grfica Patrones de organizacin de cdigo Patrones de optimizacin de cdigo Patrones de robustez de cdigo Patrones de fases de prueba

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Plantilla GoF
Nombre Un buen nombre es vital porque ser parte del vocabulario de diseo Nombres Alternativos Otros nombres de uso comn para el patrn. Propsito Qu problema pretende solucionar. Motivacin Descripcin del problema y su contexto

Puede consistir en un ejemplo (un escenario) que ilustre la clase de problemas que el patrn intenta resolver. En general se entienden mejor los problemas concretos que los abstractos.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Plantilla GoF
Estructura Representacin grfica de las clases de los objetos que participan en el patrn y de
sus relaciones estructurales (estticas) Actualmente,lo ms comn es usar UML.

Aplicabilidad En qu situaciones puede/debe aplicarse el patrn?

Participantes Las clases y objetos que participan en el patrn y sus responsabilidades o roles
Consecuencias Qu efectos positivos y negativos implica el uso del patrn?
o Cules son los compromisos de diseo que implica su uso? o Qu aspectos de la estructura del sistema pueden variar de forma independiente?

Colaboracin Cmo colaboran los participantes para llevar a cabo sus


responsabilidades y proporcionar el comportamiento deseado

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Plantilla GoF
Usos conocidos Al menos dos ejemplos de uso del patrn en aplicaciones reales. Implementacin Cmo puede implementarse el patrn en un lenguaje de programacin?
o Qu dificultades implica? o Hay aspectos dependientes del lenguaje de programacin?

Cdigo de ejemplo Fragmentos de cdigo que ilustren cmo se implementa el patrn en


uno o varios lenguajes de programacin dado?

Patrones relacionados Cules son los patrones ms estrechamente relacionados con el


o Se usa en conjuncin con otros patrones? De qu manera?

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Beneficios de los patrones


Los patrones favorecen la reutilizacin de diseos y arquitecturas a

gran escala. Capturan el conocimiento de los expertos y lo hacen accesible a toda la comunidad software. Proporcionan un cuerpo de conocimiento utilizable por toda la comunidad software. Favorecen la transmisin de conocimiento entre profesionales y entre clientes y desarrolladores Proporcionan un lenguaje comn. Los nombres de los patrones forman parte del vocabulario tcnico del ingeniero software.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Problema de los patrones


Los patrones, no llevan de forma directa a la reutilizacin

del cdigo, aunque dicha reutilizacin se facilita mediante su uso. La integracin de los patrones en el proceso de desarrollo se hace todava de forma manual. El nmero de patrones identificados es cada vez ms grande. Las clasificaciones actuales no siempre sirven de gua para decidir cual usar.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Problema de los patrones


El nmero de combinaciones patrones estilos y atributos

que se dan en la prctica son incontables. Los patrones se validan por la experiencia y el debate, no mediante la aplicacin de tcnicas formales

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Cmo seleccionar un patrn de diseo Considerar cmo los patrones de diseo solucionan

problemas de diseo. Buscar las intenciones de cada patrn. Estudiar cmo se interrelacionan los patrones. Estudiar patrones de propsito similar. Examinar la causa de un rediseo. Considerar que debera ser variable en un diseo.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Cmo usar un patrn de diseo


1. Leer el patrn una vez para tener una visin general 2. Volver y estudiar la estructura, los participantes y las

colaboraciones 3.Ver un ejemplo concreto codificado del patrn 4. Elegir nombres para los participantes del patrn que sean significativos en el contexto de la aplicacin

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Cmo usar un patrn de diseo


5. Definir las clases 6. Definir nombres especficos de la aplicacin para las operaciones en el patrn. 7. Implementar las operaciones que realizarn las responsabilidades y colaboraciones del patrn.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Problema a resolver
Existe un archivo de texto, el que se debe leer en distintos momentos y bajo condiciones variables.

Como lo resuelvo?

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Problema a resolver
Varia la estrategia de lectura

Leer solo las palabras que comiencen con t Leer las palabras de ms de 5 caracteres Leer los palndromos

Encapsular
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Singleton
Diseo de Software
UNMSM-EAPIS

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Singleton - Introduccin
Mtodo esttico (o mtodo de clase)

Mtodos y Variables estticas Antes de nada es importante entender que son los mtodos y variables estticas en el desarrollo orientado a objetos.

Singleon

Un mtodo esttico es un mtodo perteneciente a una clase que puede ser invocado sin necesidad de instanciar esa clase. Un mtodo esttico slo puede acceder a miembros estticos de la clase a la cual pertenece. Variable esttica (o variable de clase) Es una variable propia de la clase, lo cual significa que tiene el mismo valor para todas las instancias de la misma. Dicho de otra forma, no existirn dos instancias de una misma clase con diferentes valores almacenados en una variable esttica, sino que el valor ser el mismo para ambas instancias.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2

Introduccin Mtodos y variables estticas


Ejemplo

Singleton

Supongamos la siguiente clase:


public class MiFecha { public static Date fechaEstatica = new Date();

public Date fecha = new Date(); }


Supongamos por otro lado tener el siguiente mtodo main: public static void main(String[] args) {

System.out.println(MiFecha.fechaEstatica); try{
Thread.currentThread().sleep(5000); }catch(InterruptedException e){}

InstanciaFecha = new MiFecha(); System.out.println(InstanciaFecha.fecha);


System.out.println(InstanciaFecha.fechaEstatica); } Por razones de simplicidad supongamos que la clase fecha almacena las fechas con el siguiente formato:

Da/Mes/ao hh:mm:ss
Teniendo esto en cuenta, y suponiendo que la fecha en que se est ejecutando el programa es 21/05/2007 y la hora es 15:25:00, el resultado de nuestro ejemplo ser el siguiente mensaje por pantalla:

21/05/2007 15:25:00
21/05/2007 15:25:05 21/05/2007 15:25:00

Lo que se puede observar es que la variable esttica inicializ su valor en la primera referencia a la clase y no cambi ms durante la ejecucin del programa mientras que la otra variable, llamada variable de instancia, si lo hizo. Puede observarse tambin que se accedi a la variable esttica sin necesidad de instanciar la clase.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Introduccin Mtodos y variables estticas


Extendmonos un poco ms y consideremos lo siguiente:

Singleton

public static void main(String[] args) { System.out.println(MiFecha.fechaEstatica); try{ Thread.currentThread().sleep(5000);


}catch(InterruptedException e){} InstanciaFecha = new MiFecha(); System.out.println(InstanciaFecha.fecha); System.out.println(InstanciaFecha.fechaEstatica); InstanciaFecha1 = new MiFecha(); System.out.println(InstanciaFecha1.fechaEstatica); }

Esto producir lo siguiente: 21/05/2007 15:25:00 21/05/2007 15:25:05 21/05/2007 15:25:00 21/05/2007 15:25:00
Lo cual nos muestra adems de lo dicho anteriormente, que las distintas instancias de una misma clase comparten las variables estticas. Universidad Nacional Mayor de San

Marcos
Nehil M.C. 2012-2

E.A.P. de Ingeniera de Sistemas

Singleton Problema a resolver


Singleton

Asegurar que una clase tiene una nica instancia y proveer un punto de acceso global a la misma, es decir, que pueda accederse fcilmente a dicha instancia desde cualquier lugar del sistema.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Singleton Solucin
El Patrn Singleton debe usarse cuando:

Singleton

Debe existir una nica instancia de una clase y sta debe poder ser accesible desde un punto de acceso bien conocido. La nica instancia debera ser extensible por subclases y los clientes deberan poder usar una instancia que herede de la clase sin modificar su cdigo.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Singleton Solucin
Estructura
Singleton

Singleton

static Singleton uniqueInstance = null; singletonData

public static Singleton instance() protected Singleton() singletonOperation() GetSingletonData()

If (uniqueInstance==null) uniqueInstance = new Singleton(); return uniqueInstace;

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Singleton Solucin
Singleton Participantes
Singleton

- Define una operacin Instance que permite a los clientes acceder a la nica instancia. Esta operacin es una operacin de clase (ver mtodo de clase o esttico).
- Debera ser responsable de crear su propia nica instancia.

- El constructor de la clase Singleton debe ser protegido, de modo tal que sea la clase la nica que puede usarlo y as controlar la creacin de instancias de la clase.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2

Singleton Solucin
Singleton

Colaboraciones Los clientes acceden una instancia Singleton nicamente a travs de la operacin de instancia Singleton.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Singleton - Consecuencias
Singleton

Acceso controlado a la nica instancia. Dado que una clase Singleton encapsula su nica instancia, tiene un control estricto de cmo y cuando los clientes acceden a ella. Espacio de nombre reducido. El patrn Singleton es una mejora de las variables globales. Evita la contaminacin del espacio de nombres con variables globales de que almacenan una sola instancia. Permite el refinamiento de operaciones y de la representacin. La clase Singleton puede ser extendida y resulta fcil configurar una aplicacin para que utilice esta subclase. Se puede configurar una aplicacin con la instancia que sea necesaria en tiempo de ejecucin. Permite un nmero variable de instancias. El patrn permite cambiar de ideas y empezar a usar ms de una instancia con facilidad. Es ms, se puede usar el mismo enfoque para control el nmero de instancias que la aplicacin usa. Para esto lo nico necesario es modificar la operacin que garantiza el acceso a la instancia Singleton.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Singleton Ejemplo

Singleton

Consideremos una aplicacin para un video club que desea administrar la venta y alquiler de pelculas. Supongamos que deseamos agregarle una funcionalidad a dicho sistema la cual permita seleccionar diariamente una pelcula recomendada para ese da. Esto podra dar lugar a la existencia de una clase Recomendada. Diseando la misma como Singleton nos asegura de que a lo largo de todo el sistema (el cual podra estar distribuido entre sucursales) se determine una nica vez cul ser la pelcula recomendada para ese da y que sta sea una sola.

Recomendada
private static Recomendada instancia = null; private Pelicula pelicula

If (instancia == null) instancia = new Recomendada(); return instancia;

pelicula = new Pelicula();

public static Recomendada instance() private Recomendada() public Pelicula getPelicula() public void setPelicula(Pelicula nuevaPelicula)

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Factory Method

Diseo de Software
UNMSM-EAPIS

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Factory Method - Introduccin


Factory Method

Framework Es un conjunto de clases cooperando entre si con el fin de obtener un diseo reusable para ciertas clases de software especfico. Estas clases son abstractas y a partir del framework en general pueden desarrollarse varias aplicaciones creando clases que implementen esas clases abstractas. Esto conlleva a crear aplicaciones mucho ms rpidamente y todas las aplicaciones desarrolladas a partir de un mismo framework tienen estructuras muy similares.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2

Factory Method - Introduccin


Factory Method Ejemplo

Como ejemplo de framework podramos considerar uno desarrollado con el fin de crear a partir del mismo distintos editores grficos para diferentes ramas de la produccin artstica como ser dibujo, creacin musical, retoque fotogrfico, etc. Lo importante aqu a considerar es que a pesar de que cada aplicacin de stas tengan usos aparentemente muy diferentes, todas comparten una estructura de base bien definida, como ser por ejemplo las funcionalidades crear nuevo proyecto,abrir proyecto existente, guardar proyecto, y muchos ms.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2

Factory Method Problema a resolver


Factory Method

Definir una interface para crear un objeto, pero permitir que las subclases decidan que clase instanciar. Permite delegar la instanciacin a las subclases.

Los frameworks utilizan clases abstractas para definir y mantener relaciones entre objetos. Generalmente el framework tambin es responsable de crear estos objetos.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Factory Method Problema a resolver


Ejemplo
Documento Aplicacin

Factory Method

Open() Close() Save() Revert()

CreateDocument() NewDocument()
OpenDocument()

Document doc = createDocument(); Doc.add(doc); Doc.Open();

Imagen

AplicacionDibujo CreateDocument()

return new Imagen();

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Factory Method - Solucin


Este patrn se usa cuando: La clase no puede saber de antemano que tipo de objetos crear. La clase quiere que sean sus subclases las que especifiquen que objeto crear. Clases que necesitan delegar esta responsabilidad a una de varias subclases y se desea saber cul de ellas es la delegada(*).
Factory Method

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Factory Method - Solucin


Estructura
Producto Creador

Factory Method

FactoryMethod() nuevoProducto()

Producto = FactoryMethod()

ProductoConcreto

CreadorConcreto

FactoryMethod()

return new ProductoConcreto();

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Factory Method - Solucin


Factory Method

Participantes
Producto: Define la interface de los objetos que el mtodo

FactoryMethod() crea. ProductoConcreto: implementa la interface de Producto. Creador: declara el mtodo factory, el cual retorna un objeto del tipo Producto. A su vez podra definir una implementacin por defecto para el Factory Method que retorne un objeto de ProductoConcreto por defecto. A su vez debera llamarse al FactoryMethod para crear instancias de Producto. CreadorConcreto: Implementa el mtodo FactoryMethod de la clase Creador de tal forma que este cree instancias de la clase ProductoConcreto correspondiente. Si en Creador se le dio a FactoryMethod una implementacin por defecto, CreadorConcreto puede hacer un override de la misma.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2

Factory Method - Solucin

Colaboraciones

Factory Method

La clase Creador cuenta con que sus subclases implementen el factory method de forma tal de que este retorne una instancia de la clase ProductoConcreto correspondiente.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Factory Method - Consecuencias


Factory Method
Una de las desventajas ms importantes de este patrn es que los clientes deben extender si o si la clase Creador slo para poder crear objetos de la clase ProductoConcreto. Esto no sera un problema si de todos modos para la aplicacin era necesario extender aquella clase, pero en caso de que esto no hubiera sido necesario de antemano el patrn obliga a crear subclases.
Otras dos consecuencias son:
Facilita a las subclases la creacin de objetos desde ellas mismas, lo cul es mucho ms flexible

que crear un objeto directamente, dado que las clases padres tiene un factory method para crear objetos. Como las subclases pueden hacer override del factory method, stas podrn crear objetos adecuados a sus necesidades. Conecta jerarquas paralelas de clases. Supongamos tener una clase abstracta que hace uso de otra clase como cliente. Esta clase tendr una serie de subclases las cuales podran necesitar usar como clientes una serie de subclases de aquella de la que la clase padre es cliente. Colocando un factory mehtod en la clase padre y permitiendo que cada subclase implemente este mtodo de acuerdo a la subclase correspondiente de la clase de la cual es cliente nos lleva a tener bien definido el paralelismo entre las clases clientes y las clases servidor.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Factory Method - Solucin


Ejemplo de conexin de jerarquas paralelas.
Figura Manipulador

Factory Method

es_cliente_de
CrearManipulador()

Linea

Texto

ManipLinea

ManipTexto

CrearManipulador()

CrearManipulador()

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Factory Method - Ejemplo


Factory Method
Consideremos el ejemplo ya dado en el cual se desea tener un marco con el que crear distintas aplicaciones que manejan distintos tipos de documentos. En aquel caso la aplicacin creadora particular creaba, valga la redundancia, documentos de tipo imagen. Para ver el uso general de este patrn, supongamos ahora, que basndonos en las mismas clases abstractas queremos crear una aplicacin que trabaje con documentos de texto. Lo nico necesario ser crear una clase que herede de la clase Aplicacin y que implemente adecuadamente el mtodo abstracto CrearDocumento() para que este instancie objetos de tipo texto, los cuales, a su vez, son subclases de la clase Documento. El diagrama correspondiente con su implementacin sera:
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2

Factory Method - Ejemplo


Factory Method
Documento Open() Close() Save() Revert() Aplicacin CreateDocument()
NewDocument()

OpenDocument()

Document doc = createDocument(); Doc.add(doc); Doc.Open();

Texto

AplicacionTexto
CreateDocument() return new Texto();

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Abstract Factory

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Abstract Factory: Definicin

Abstract Factory

El patrn Abstract Factory proporciona una interfaz para crear familias de objetos relacionados o que dependen entre s, sin especificar sus clases concretas. Permite trabajar con objetos de distintas familias de manera que las familias no se mezclen entre s y haciendo transparente el tipo de familia concreta que se est usando. Qu queremos decir con familias de productos? Imaginemos que tenemos una aplicacin y queremos que pueda mostrarse en mltiples sistemas de ventanas. Por ejemplo, en una ventana no queremos que se mezclen botones tipo Windows 95 con barras de desplazamiento de estilo Mac. Por esto, debemos asegurarnos que todos los objetos de interfaz de usuario que creemos pertenezcan a la misma familia.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2

Abstract Factory: Definicin


Propsito

Abstract Factory

Proporciona una interfaz para la creacin de distintos tipos de objetos relacionados sin necesidad de especificar a qu clase concreta pertenecen.

Otros nombres
Kit o Toolkit

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Abstract Factory: Motivacin

Abstract Factory

Un caso relativamente comn de uso de este patrn se da en la creacin de familias de interfaces grficos en las cuales los elementos (productos) del interfaz se mantienen constantes (por ejemplo labels, botones, cajas de texto ...) pero el dibujado de dichos elementos puede delegarse en distintas familias de forma que, en funcin de la fbrica seleccionada obtenemos unos botones u otros.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Abstract Factory: Ejemplo Motivacin Abstract Factory

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Abstract Factory: Aplicaciones Abstract Factory


Usar cuando

Un sistema debe ser independiente de los procesos de creacin, composicin y representacin de sus productos El uso de este patrn est recomendado para situaciones en las que tenemos una familia de productos concretos y prevemos la inclusin de distintas familias de productos en un futuro.

Permite que los clientes slo conozcan las interfaces de los productos y no sus implementaciones concretas.
Se quiere proporcionar una librera de productos y solo se quiere revelar sus interfaces
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Abstract Factory: Estructura


Abstract Factory

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Abstract Factory: Participantes

Abstract Factory

AbstractFactory define la interfaz para la creacin de los

productos y las ConcreteFactory implementan dicha interfaz.

AbstractProduct declara la interfaz para un cierto tipo de producto y los ConcreteProduct implementan dicha interfaz y definen un tipo de producto que ser creado por la correspondiente ConcreteFactory.

Los clientes tan solo dependen de las interfaces AbstractFactory y AbstractProduct.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Abstract Factory: Colaboraciones

Abstract Factory

Normalmente se crea una instancia de alguna ConcreteFactory para la creacin de los objetos ConcreteProduct. Esto es en tiempo de inicializacin. AbstractFactory delega la creacin de productos concretos (ConcreteProduct) en las ConcreteFactory.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Abstract Factory: Consecuencias Abstract Factory

Ventajas

Asla las clases de implementacin

Ayuda a controlar los objetos que se crean Encapsula la responsabilidad de creacin Hace fcil el intercambio de familias de productos Cambio de factory -> Cambio de familia Fomenta la consistencia entre productos

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Abstract Factory: Consecuencias Abstract Factory

Desventajas

Puede ser difcil incorporar nuevos tipos de productos (cambiar AbstractFactory y sus factorias concretas)

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Abstract Factory: EjemplosAbstract Factory


Un caso de uso de este patrn se da en la creacin de familias de Continentes en las cuales los elementos (productos) del interfaz se mantienen constantes (por ejemplo Herbvoro, Carnvoro) pero el dibujado de dichos elementos puede delegarse en distintas familias de forma que, en funcin de la fbrica seleccionada obtenemos unos animales u otros.

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

Abstract Factory: Ejemplos

Abstract Factory

Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas

Nehil M.C.

2012-2

También podría gustarte