analisis y dise Ño o.o. · patrones gof analisis y dise Ño o.o. patrones gof gof (gang of four )...

26
1 Patrones Patrones GoF GoF ANALISIS Y DISE ANALISIS Y DISEÑO O.O. O O.O. Patrones Patrones GoF GoF GoF GoF ( gang gang of of four four) 23 patrones presentados por la 23 patrones presentados por la pandilla de los cuatro pandilla de los cuatro” en el en el libro libro “ Design Patterns Design Patterns” . Gamma, . Gamma, Helm, Johnson, Vlissides. 1995. Helm, Johnson, Vlissides. 1995.

Upload: others

Post on 26-Jun-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

1

Patrones Patrones GoFGoF

ANALISIS Y DISEANALISIS Y DISEÑÑO O.O. O O.O.

Patrones Patrones GoFGoF

�� GoFGoF ((ganggang ofof fourfour))

23 patrones presentados por la 23 patrones presentados por la

““pandilla de los cuatropandilla de los cuatro”” en el en el

libro libro ““Design PatternsDesign Patterns””. Gamma, . Gamma,

Helm, Johnson, Vlissides. 1995.Helm, Johnson, Vlissides. 1995.

Page 2: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

2

Patrones Patrones GoFGoF

�� ¿¿CCóómo usar un patrmo usar un patróón de disen de diseñño?o?

�� Conocer en gran parte la soluciConocer en gran parte la solucióón n

gengenéérica que brinda cada patrrica que brinda cada patróón y el n y el

tipo de problemtipo de problemáática que resuelventica que resuelven

�� Evaluar la posibilidad de aplicar el o los Evaluar la posibilidad de aplicar el o los

patrones en el problema patrones en el problema

correspondientecorrespondiente

�� Definir la implementaciDefinir la implementacióón de los mismos n de los mismos

en nuestro modelo. Nombre de clases, en nuestro modelo. Nombre de clases,

mméétodos y atributostodos y atributos

�� Implementar los mImplementar los méétodos todos

correspondientescorrespondientes

�� De creaciDe creacióón:n: Forma de crear Forma de crear instancias. Abstraer y ocultar cinstancias. Abstraer y ocultar cóómo mo son creados e inicializados los objetos son creados e inicializados los objetos (Factor(Factoríía (a (FactoryFactory), ), SingletonSingleton))

�� Estructurales:Estructurales: CCóómo se combinan mo se combinan clases y objetos para formar nuevas clases y objetos para formar nuevas estructuras y proporcionar nuevas estructuras y proporcionar nuevas funciones (Adaptador (funciones (Adaptador (AdapterAdapter))))

�� De comportamiento:De comportamiento: Ayudan a definir Ayudan a definir la comunicacila comunicacióón e interaccin e interaccióón de los n de los objetos. Reducir acoplamiento objetos. Reducir acoplamiento ((ObserverObserver).).

Patrones Patrones GoFGoF

Page 3: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

3

Patrones G o FPatrones G o F

�� Patrones de Patrones de CreaciCreacióónn

�� AbstractAbstract FactoryFactory

�� FactoryFactory MethodMethod

�� SingletonSingleton

�� Patrones EstructuralesPatrones Estructurales

�� CompositeComposite

�� AdapterAdapter

�� Patrones de ComportamientoPatrones de Comportamiento

�� ObserverObserver

Patrones De creaciPatrones De creacióónn

� Separan la forma en que se crean los objetos, para tratar las clases a crear de forma genérica.

� Se ocultan los métodos y clases concretas de tal forma que al variar su implementación no se vea afectado el resto de la aplicación.

Page 4: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

4

� Se encarga de centralizar el sitio donde se

crean los objetos, normalmente donde se crean

objetos de una misma "familia“.

� La clase factoría devuelve una instancia de

un objeto según los datos que se le pasan como

parámetros.

� Su propósito es definir una interface para crear

objetos donde se delega la creación de las instancias

a las subclases.

FactoriaFactoria ((FactoryFactory))

Motivación:

� Un sistema debe ser independiente de cómo se

crean, componen y representan sus productos

� Un sistema debe ser configurado con una familia

de productos

� Una familia de objetos relacionados está

diseñada para ser usada conjuntamente, y es

necesario hacer cumplir esta restricción.

� Quiere proporcionar una biblioteca de clases, y

sólo quiere revelar sus interfaces, no sus

implementaciones.

FactoriaFactoria ((FactoryFactory))

Page 5: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

5

� Una clase C cliente de una clase abstracta A

necesita crear instancias de subclases de A que no

conoce Clase A

FactoriaFactoria ((FactoryFactory))

MiDocumento

Documento

open()close()save()revert()

<<abstract>>

Aplicacion

crearDocumento()

nuevoDocumento()

openDocumento()

<<abstract>>

MiAplicacion

crearDocumento()

return new MiDocumento

Documento dd = crearDocumento();

setDoc.add(d);d.open()

“método factoria”

Clase C

setDoc

Ejemplo del patrón

Factory Method

�� AplicabilidadAplicabilidad�� Una clase no puede anticipar la clase de Una clase no puede anticipar la clase de

objetos que debe crear.objetos que debe crear.

�� Una clase desea que sus subclases Una clase desea que sus subclases especifiquen los objetos que debe crear.especifiquen los objetos que debe crear.

Linea

crearManipulador()

Circulo

crearManipulador()

ManipuladorLinea ManipuladorCirculo

Manipulador

downClick()drag()upClick()

<<abstract>>

ClienteFigura

crearManipulador()

<<abstract>>

FactoriaFactoria ((FactoryFactory))

Ejemplo del patrón

Abstract Factory

Page 6: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

6

�� ImplementaciImplementacióónn�� Dos posibilidadesDos posibilidades

�� CreadorCreador es una clase abstracta con un es una clase abstracta con un mméétodo factortodo factoríía abstracto.a abstracto.

�� CreadorCreador es una clase concreta que es una clase concreta que ofrece una implementaciofrece una implementacióón por defecto n por defecto del mdel méétodo factortodo factoríía.a.

�� El mEl méétodo factortodo factoríía puede tener un a puede tener un parparáámetro que identifica a la clase metro que identifica a la clase del objeto a crear.del objeto a crear.

FactoriaFactoria ((FactoryFactory))

ProgramaPrograma

public abstract Figura

{

int lado = 0;

public Figura (int lado)

{

this.lado = lado;

}

public abstract int getArea ();

public abstract void dibujar (Graphics g, int x, int y);

}

FactoriaFactoria ((FactoryFactory))

Page 7: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

7

public Circulo

{

public Circulo (int lado)

{

super (lado);

}

public int getArea ()

{

return (Math.PI x lado x lado);

}

public void dibujar (Graphics g, int x, int y)

{

g.setColor (Color.black);

g.setDrawArc (x, y, lado, lado, 0, 360);

}

}

public Cuadrado

{

public Cuadrado (int lado)

{

super (lado);

}

public int getArea ()

{

return (lado x lado);

}

public void dibujar (Graphics g, int x, int y)

{

g.setColor (Color.black);

g.setDrawRect (x, y, lado, lado);

}

}

FactoriaFactoria ((FactoryFactory))

public void FactoriaDeFiguras

{

public static final int CUADRADO = 0

public static final int CIRCULO = 1

public Figura getFigura (int tipo, int lado)

{

if (tipo == this.CUADRADO)

{

return (new Cuadrado (lado))

}

else

{

return (new Circulo (lado))

}

}

}

FactoriaFactoria ((FactoryFactory))

Page 8: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

8

�� Ventajas: Ventajas: �� AislaAisla las clases concretas para el clientelas clases concretas para el cliente

�� Facilita el intercambio entre familias de Facilita el intercambio entre familias de

claseclase

�� Promueve la consistenciaPromueve la consistencia

�� Desventajas:Desventajas:�� No es sencillo agregar elementos a la No es sencillo agregar elementos a la

factorfactoríía.a.

�� Requiere modificar la Requiere modificar la interfaceinterface

�� Requiere modificar las subclasesRequiere modificar las subclases

FactoriaFactoria ((FactoryFactory))

Patrones Patrones GoFGoF

�� AbstractAbstract FactoryFactory

Este patrEste patróón proporciona una n proporciona una

interfaceinterface para crear familias de para crear familias de

objetos relacionados o objetos relacionados o

dependientes sin especificar sus dependientes sin especificar sus

clases concretas.clases concretas.

Page 9: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

9

AbstractAbstract FactoryFactory

�� Se utiliza Se utiliza cuandocuando……

�� Un sistema deberUn sistema deberíía ser independiente de a ser independiente de

ccóómo sus productos son creados, mo sus productos son creados,

compuestos o representados.compuestos o representados.

�� Un sistema serUn sistema seríía configurado con uno de a configurado con uno de

sus msus múúltiples familias de productos.ltiples familias de productos.

�� Se necesita proveer una librerSe necesita proveer una libreríía de clases a de clases

de productos y se desea mostrar sus de productos y se desea mostrar sus

interfaces, no sus implementaciones.interfaces, no sus implementaciones.

�� Se necesita que un conjunto de productos Se necesita que un conjunto de productos

relacionados sean utilizados juntos. relacionados sean utilizados juntos.

AbstractAbstract FactoryFactory

�� La estructura tLa estructura tíípica es:pica es:�� AbstractAbstract FactoryFactory: Definici: Definicióón de n de

interfaces para la familia de productos interfaces para la familia de productos gengenééricosricos

�� Concrete Concrete FactoryFactory: : ImplementaciImplementacióón de n de las interfaces de los productos para las interfaces de los productos para cada una de las familias concretascada una de las familias concretas

�� AbstractAbstract ProductProduct: : DefiniciDefinicióón de los n de los mméétodos de creacitodos de creacióón genn genééricos en la ricos en la interfaceinterface de la fde la fáábrica. (retornan las brica. (retornan las interfaces geninterfaces genééricas)ricas)

�� Concrete Concrete ProductProduct: : ImplementaciImplementacióón de n de una funa fáábrica para cada una de las brica para cada una de las familias concretas.familias concretas.

Page 10: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

10

AbstractAbstract FactoryFactory

�� Estructura tEstructura tíípicapica Abstract Factory

Concrete Factory

Abstract

Product

Concrete Product

AbstractAbstract FactoryFactory

�� Ventajas y DesventajasVentajas y Desventajas�� AislaAisla las Clases concretas: El cliente las Clases concretas: El cliente

manipula instancias a travmanipula instancias a travéés de las s de las interfaces abstractas.interfaces abstractas.

�� Facilita el intercambio de familias de Facilita el intercambio de familias de productos: Se puede cambiar la productos: Se puede cambiar la configuraciconfiguracióón de un producto simplemente n de un producto simplemente cambiando la cambiando la factoriafactoria concreta.concreta.

�� Promueve la consistencia entre productos: Promueve la consistencia entre productos: Cuando los objetos de una familia trabajan Cuando los objetos de una familia trabajan juntos, la aplicacijuntos, la aplicacióón que los usa debe utilizar n que los usa debe utilizar la misma familiala misma familia

�� Es difEs difíícil manejar nuevas clases de cil manejar nuevas clases de productos: Implica cambios en la clase productos: Implica cambios en la clase AbstractAbstract FactoryFactory..

Page 11: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

11

Patrones Patrones GoFGoF

�� FactoryFactory MethodMethod

Define una Define una interfaceinterface para crear un para crear un

objeto, pero deja a las subclases objeto, pero deja a las subclases

decidir qudecidir quéé clase clase instanciarinstanciar..

�� Se usa cuando:Se usa cuando:

�� Una clase no puede anticipar la clase de Una clase no puede anticipar la clase de

objetos que debe crear.objetos que debe crear.

�� Una clase quiere que sus subclases Una clase quiere que sus subclases

especifiquen las clases que ella debe especifiquen las clases que ella debe

crear.crear.

FactoryFactory MethodMethod

�� Utiliza una clase constructora (al Utiliza una clase constructora (al

estilo del estilo del AbstractAbstract FactoryFactory) abstracta ) abstracta

con unos cuantos mcon unos cuantos méétodos definidos todos definidos

y y otro(sotro(s) ) abstracto(sabstracto(s): el dedicado a ): el dedicado a

la construccila construccióón de objetos de un n de objetos de un

subtipo de un tipo determinado.subtipo de un tipo determinado.

�� Las clases principales en este Las clases principales en este

patrpatróón son el creador y el producto.n son el creador y el producto.

Page 12: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

12

FactoryFactory MethodMethod

�� El creador necesita crear instancias de productos, El creador necesita crear instancias de productos,

pero el tipo concreto de producto no debe ser pero el tipo concreto de producto no debe ser

forzado en las subclases del creador, porque forzado en las subclases del creador, porque

entonces las posibles subclases del creador entonces las posibles subclases del creador

deben poder especificar subclases del producto deben poder especificar subclases del producto

para utilizar.para utilizar.

FactoryFactory MethodMethod

MiDocumento

Documento

open()close()save()revert()

<<abstract>>

Aplicacion

crearDocumento()

nuevoDocumento()

openDocumento()

<<abstract>>

MiAplicacion

crearDocumento()

return new MiDocumento

Documento dd = crearDocumento();

setDoc.add(d);d.open()

“método factoria”

Clase C

setDoc

Ejemplo del patrón

Factory Method

Clase A

Page 13: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

13

FactoryFactory MethodMethod

�� Una desventaja es tener que crear una Una desventaja es tener que crear una

subclase de la clase subclase de la clase CreatorCreator ssóólo para lo para

crear un objeto de la clase crear un objeto de la clase

ConcreteProductConcreteProduct

Product

ConcretProduct

Creator

FactoryMethod()

AnOperation()

ConcreteCreator

FactoryMethod()

AnOperation()

Product=FactoryMethod()

return new ConcreteProduct

FactoryFactory MethodMethod

// Definimos la clase abstracta // Definimos la clase abstracta CreatorCreator

publicpublic abstractabstract classclass CreatorCreator{ {

// Operaci// Operacióón que realiza n que realiza

publicpublic voidvoid anOperationanOperation()(){ {

ProductProduct aProductaProduct = = factoryMethodfactoryMethod()(); ;

} }

// Definimos m// Definimos méétodo abstracto todo abstracto

protectedprotected abstractabstract ProductProduct factoryMethodfactoryMethod()(); ;

} }

Page 14: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

14

FactoryFactory MethodMethod

//Ahora definimos el creador concreto.//Ahora definimos el creador concreto.

publicpublic classclass ConcreteCreatorConcreteCreator extendsextends CreatorCreator{ {

protectedprotected ProductProduct factoryMethodfactoryMethod()() { {

returnreturn newnew ConcreteProductConcreteProduct()(); ; } }

} }

//Y definimos el producto y su implementaci//Y definimos el producto y su implementacióón concreta.n concreta.

publicpublic interfaceinterface ProductProduct{ { StringString hacer(); hacer();

} }

publicpublic classclass ConcreteProductConcreteProduct implementsimplements ProductProduct{ { ……

} }

FactoryFactory MethodMethod

//Y un ejemplo de //Y un ejemplo de usouso ::

publicpublic staticstatic voidvoid main(main(StringString argsargs[]){ []){

CreatorCreator aCreatoraCreator; ;

aCreatoraCreator = = newnew ConcreteCreatorConcreteCreator(); ();

aCreator.anOperationaCreator.anOperation(); ();

} }

Page 15: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

15

Patrones Patrones GoFGoF

�� SingletonSingleton

� Asegura que sólo se cree una instancia de la clase

y provee un punto global de acceso a ésta.

�Este patrón es útil cuando se quiere tener solamente

un objeto único instanciado (Ej: Cola de impresión,

Conexión a BD, etc).

� Cuenta con un método o propiedad compartida

(shared) que se encarga de regresar la clase

instanciada.

� El constructor de la clase debe ser privado para

evitar que se creen instancias de la clase.

� Dentro de la clase tendremos nuestra instancia viva.

SingletonSingleton

Page 16: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

16

return unicaInstancia

Singleton

unicaInstanciadatoSingleton

instancia()operacionSingleton()

getSingleton()

SingletonSingleton

final class Coche {

/* la única instancia de coche que se permitirá.

No es obligatorio crear el Singleton estáticamente,

se podría proveer un método que lo cree */

private static Coche c = new Coche();

// atributos

private Motor motor = new Motor();

. . .

//constructor privado para que no se pueda instanciar

private Coche(){}

//vacío porque creamos la instancia estáticamente

// método que devuelve el "singleton" Coche

public static Coche getCoche () {

return c;

}

// resto de métodos

public void acelerar() {

// implementación del metodo

}

SingletonSingleton

Page 17: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

17

class ClaseSingletonEjemplo {

static ClaseSingletonEjemplo unicaInstancia;

public static ClaseSingletonEjemplo Instance(){

if (unicaInstancia == null)

unicaInstancia = new ClaseSingletonEjemplo();

return unicaInstancia;

}

private ClaseSingletonEjemplo(){}

};

SingletonSingleton

Patrones Patrones GoFGoF

�� CompositeComposite

�� Compone objetos en estructuras Compone objetos en estructuras

arborescentes para representar arborescentes para representar

jerarqujerarquíías TODOas TODO--PartesPartes

�� Permite manejar indistintamente Permite manejar indistintamente

objetos individuales y objetos individuales y

composiciones de objetoscomposiciones de objetos

Page 18: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

18

CompositeComposite

Cliente Componente

Operación()

Adicionar(Componente)

Remover(Componente)

obtenerHijo(int)

Hoja

Operación()

Composite

Operación()

Adicionar(Componente)

Remover(Componente)

obtenerHijo(int)

hijos

Para todo g en hijos:

g.Operación()

CompositeComposite

�� La estructura tLa estructura tíípica es:pica es:�� ComponenteComponente

�� Declara la Declara la interfaceinterface para objetos en la para objetos en la composicicomposicióón y se encarga de acceder y n y se encarga de acceder y manejar sus componentes hijomanejar sus componentes hijo

�� HojaHoja�� Representa objetos hoja (sin hijos) en la Representa objetos hoja (sin hijos) en la

composicicomposicióón y define un comportamiento n y define un comportamiento especespecíífico fico

�� CompositeComposite�� Almacena componentes hijo y define un Almacena componentes hijo y define un

comportamiento (adicionar, eliminar, comportamiento (adicionar, eliminar, modificarmodificar……) para sus componentes hijos) para sus componentes hijos

Page 19: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

19

CompositeComposite

ObjetoGráfico

Dibujar()

Adicionar(ObjetoGráfico)

Remover(ObjetoGráfico)

obtenerHijo(int)

Línea

Dibujar()

Texto

Dibujar()

Rectángulo

Dibujar()

Figura

Dibujar()

Adicionar(ObjetoGráfico g)

Remover(ObjetoGráfico g)

obtenerHijo(int)

elementos

En Dibujar() de figura: para todo g en el

contenedor elementos g.Dibujar()

Adicionar o remover g del contenedor elementos

Componente

Composite

Hoja Hoja Hoja

Patrones Patrones GoFGoF

�� AdapterAdapter

�� Convierte la Convierte la interfaceinterface de una de una

clase en otra clase en otra interfaceinterface que el que el

cliente esperacliente espera

�� Permite a las clases trabajar Permite a las clases trabajar

juntas ya que de otra manera no juntas ya que de otra manera no

lo podrlo podríían hacer debido a que las an hacer debido a que las

interfaces son incompatibles.interfaces son incompatibles.

Page 20: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

20

� Se asegura de convertir la interface de una

clase en otra que el cliente espera.

� Permite la colaboración de ciertas clases a

pesar de tener interfaces incompatibles

� Se desea crear una clase reutilizable que debe

colaborar con clases no relacionadas o

imprevistas.

� La funcionalidad de Adaptador depende de la similitud entre la interfaz de las clases Objetivo y Adaptado.

Adaptador (Adaptador (AdapterAdapter//WrapperWrapper))

AdaptadorAdaptador

�� ObjetivoObjetivo�� Define la Define la interfaceinterface de dominio de dominio

especespecíífico que el cliente usafico que el cliente usa

�� ClienteCliente�� Colabora con los objetos que Colabora con los objetos que

conforman la conforman la interfaceinterface ObjetivoObjetivo

�� AdaptadoAdaptado�� Define una Define una interfaceinterface existente que existente que

necesita adaptarsenecesita adaptarse

�� AdaptadorAdaptador�� Adapta la Adapta la interfaceinterface Adaptado a la Adaptado a la

interfaceinterface ObjetivoObjetivo

Page 21: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

21

Adaptador (Adaptador (AdapterAdapter//WrapperWrapper))

� Estructura 1: Herencia Múltiple

Interface que

el cliente

espera

Interface existente que se requiere

adaptar

Adapta la interface “Adaptee”

al “Target esperado usando

herencia múltiple

Adaptador (Adaptador (AdapterAdapter//WrapperWrapper))

� Estructura 2: Objeto Adaptador

Interface que

el cliente

espera

Interface existente

que se requiere

adaptar

Adapta la interface “Adaptee”

al “Target esperado usando

un objeto adaptador

Page 22: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

22

AdaptadorAdaptador

Cliente Objetivo

Requerimiento()

Adaptado

RequerimientoEspecífico()

Adaptador

Requerimiento()

implementación

Realmente se invoca el

RequerimientoEspecífico()

ElemLinea

marco()crearManipulador()

EditorElementoGrafico

marco()crearManipulador()

ElemTexto

marco()crearManipulador()

TextView

getExtension()

+texto

return text.getExtension

return new ManipuladorTexto

Adaptador (Adaptador (AdapterAdapter//WrapperWrapper))

ClienteObjetivo

Adaptador

Adaptado

Page 23: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

23

TreeDisplay

getChildren(Node)CreateGraphicNode(Node)display()BuildTree(Node n)

DirectoryTreeDisplay

getChildren(Node)createGraphicNode(Node)

getChildren(n);for each child {

addGraphicNode(CreateGraphicNode(child));buildTree(child)

}

FileSystemEntity

adaptadoradaptado

Objetivo, ClienteAbstracta

Adaptador (Adaptador (AdapterAdapter//WrapperWrapper))

Patrones Patrones GoFGoF

�� ObserverObserver

�� Define una dependencia de uno a Define una dependencia de uno a

muchos entre objetos asmuchos entre objetos asíí que que

cuando un objeto cambia de cuando un objeto cambia de

estado, todos los objetos que estado, todos los objetos que

dependen de dependen de éél son notificados l son notificados

para que se actualicen para que se actualicen

automautomááticamente.ticamente.

Page 24: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

24

Patrones Patrones GoFGoF

�� ObserverObserver

� Define una dependencia de uno a muchos

objetos de tal manera que cuando un objeto

cambia su estado, todas sus dependencias son

notificadas actualizándose de manera automática

� Se usa cuando una abstracción tiene dos

aspectos y uno depende del otro. Encapsular

estos dos aspectos en objetos separados permite

actualizarlos y reutilizarlos de manera

independiente.

� Cuando un cambio en un objeto requiere

cambios en otros objetos asociados sin importar

el tipo de esos cambios!

ObserverObserver

�� Sus principales componentes Sus principales componentes son:son:

�� Sujeto:Sujeto: Puede tener asociados uno Puede tener asociados uno o mo máás observadoress observadores

�� Observador:Observador: Es notificado cuando Es notificado cuando el sujeto cambia de estado. Cada el sujeto cambia de estado. Cada observador pregunta al sujeto observador pregunta al sujeto acerca de su estado con el fin de acerca de su estado con el fin de sincronizar su estado con el del sincronizar su estado con el del sujeto.sujeto.

Page 25: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

25

ObserverObserver

101080z

203050y

103060x

cba x

0

20

40

60

80

a b c

x

Promedio

a = 60

b = 30

c = 10

Sujeto

Observadores: N Observadores que cambian su presentación dependiendo de los datos del “Sujeto”

x

a

b

c

Notificación de

cambio

Solicitudes,

modificaciones

�Ejemplo: Uso

de una interfaz

gráfica para

separar la

presentación de

la lógica de los

datos

Todos los Observadores son

notificados de cualquier cambio en el estado del

“Sujeto”

ObserverObserver

SujetoAsociar (Observador)Desasociar (Observador)Notificar()

Observador

Actualizar()

ObservadorConcreto

estadoObservador

Actualizar()

SujetoConcretoestadoSujetodarEstado()modificarEstado()

observadores

Para todo o en observadores: o.Actualizar()

sujeto

estadoObservador= sujeto.darEstado()darEstado() retorna

estadoSujeto

Conoce a todos sus

Observadores

Define una inteface actualizable para

objetos que podrían ser notificados de

cambios en el “Sujeto”

Mantiene un estado y nofitica a los Observadores de sus cambios

Implementa la Interface para

mantener la actualización acorde con el estado del “Sujeto”

Page 26: ANALISIS Y DISE ÑO O.O. · Patrones GoF ANALISIS Y DISE ÑO O.O. Patrones GoF GoF (gang of four ) 23 patrones presentados por la “pandilla de los cuatro ” en el libro “Design

26

ObserverObserver

� Ejemplo de Implementación utilizando un

Manejador del Cambio: (evita al sujeto tener las referencias

de sus observadores)