You are on page 1of 25

Catalogo de

Patrones de diseo
E.A.P. Computacin Cientfica

Integrantes:
Lucero Polo
Cristian Quezada

ndice
Patrones de diseo
Bibliografa

Patrones de diseo
Creacional

Fbrica Abstracta, Mtodo Fbrica,


Constructor, Prototipo, Singleton

Estructural

Adaptador, Puente, Compuesto,


Decorador, Fachada, Peso Mosca,
Proxy

De
Comportamiento

Cadena de Responsabilidad, Comando,


Iterador, Mediador, Memento,
Observador, Estado, Estrategia,
Visitante, Mtodo Plantilla

Ejemplo: Patrn Fachada


1. Problema
Se quiera proporcionar una interfaz
sencilla para un subsistema complejo
Se quiera desacoplar un subsistema
de sus clientes y de otros
subsistemas, hacindolo mas
independiente y portable
Se quiera dividir los sistemas en
niveles: las fachadas seran el punto
de entrada a cada nivel

Ejemplo: Patrn Fachada


1. Problema (Ejemplo-Estructura de un Compilador)

Editor

Linkador
Depurador

Compilador
Clases del

Compilar()

subsistema de
compilacin

Leyenda:
o AnaSin: Anlisis Sintctico
o AnaLex: Anlisis Lxico
o ASem: Anlisis Semntico
o TabSim: Tabla de Smbolos

AnaSin

ASem

AnaLex

TabSim

Token

Ejemplo: Patrn Fachada


2. Solucin
Clases del

Fachada

subsistema
B

Los clientes se comunican con el subsistema a travs


de la fachada, que reenva las peticiones a los objetos
del subsistema apropiados y puede realizar tambin
algn trabajo de traduccin

Los clientes que usan la fachada no necesitan acceder


directamente a los objetos del sistema

Ejemplo: Patrn Fachada


3. Ventajas e Inconvenientes
Oculta a los clientes de la complejidad del
subsistema y lo hace ms fcil de usar
Favorece un acoplamiento dbil entre el
subsistema y sus clientes, consiguiendo que los
cambios de las clases del sistema sean
transparentes a los clientes

Facilita la divisin en capas y reduce


dependencias de compilacin

No se impide el acceso a las clases


del sistema

Ejemplo: Patrn Fachada


4. Detalles de implementacin
Se puede reducir an ms el
acoplamiento haciendo que la fachada
sea una clase abstracta, de forma
que se pueda escoger entre distintas
implementaciones del subsistema
Usando la visibilidad de paquete de Java
puede ocultar el acceso a clases de un
subsistema.

ndice
Introduccin
Patrones de diseo de uso comn
Bibliografa

Clasificacin
Creacional

Fbrica Abstracta, Mtodo Fbrica,


Constructor, Prototipo, Singleton

Estructural

Adaptador, Puente, Compuesto,


Decorador, Fachada, Peso Mosca, Proxy

De
Comportamiento

Cadena de Responsabilidad, Comando,


Iterador, Mediador, Memento,
Observador, Estado, Estrategia,
Visitante, Mtodo Plantilla

La Fbrica Simple
OJO! Es una fbrica abstracta con un solo
producto. NO es un PD.
La Fbrica Simple sirve para encapsular el cdigo
de creacin de objetos en una clase.
FormaPreguntarFactory

llama
...
IFormaPreguntar p;
p = factory.create();
...

create(): IFormaPreguntar

crea
<<interface>>

IFormaPreguntar
IFormaPreguntar p = null;
if ()
p = new
PreguntaAzar();
else
p = new PreguntaTodas();
return p;

PreguntaAzar

PreguntaTodas

A lo que crea una fbrica se les


denomina productos

El Patron Fbrica Abstracta


El PD Fbrica Abstracta proporciona una interfaz para
crear familias de objetos relacionados o dependientes sin
necesidad de especificar sus clases concretas

Client

La AbstractFactory define la interfaz


de las fbricas concretas, que consiste
en un conjunto de mtodos para crear
productos.

AbstractProductA

AbstractFactory

createProductA()

ProductA2

ProductA1

createProductB()

ConcreteFactory1

ConcreteFactory2

createProductB()

createProductB()

createProductA()

createProductA()

Cada fbrica concreta


crea el conjunto entero
de productos.

Las fbricas concretas implementan


las familias de producto. Para crear un
producto, el cliente usa una de estas
fbricas en lugar de instanciarlo
directamente

AbstractProductB

ProductB2

Imagen basada en el libro Head First Design Patterns, OReilly

ProductB1

El Patrn Singleton
El PD Singleton garantiza que una clase slo tenga una
instancia y proporciona un punto de acceso global a
ella.
PrinterManager
El truco es poner el
constructor privado. As
se evita que otras
clases puedan crear
instancias de
PrinterManager

- instance: PrinterManager =
null
- PrinterManager()
+ getInstance(): PrinterManager
+ print(Document d)

Quien quiera usar el


PrinterManager lo har con
este cdigo

...
PrinterManager p = PrinterManager.getInstance();
p.print(d);
El nico objeto de tipo
PrinterManager est en el
atributo instance de la clase
PrinterManager

PrinterManager es un
singleton que maneja la
cola de impresin para una
impresora

if (instance == null)
instance = new PrinterManager();
return instance

PrinterManager
(Clase)
instance
(objeto de tipo
PrinterManager)

Clasificacin
Creacional

Fbrica Abstracta, Mtodo Fbrica,


Constructor, Prototipo, Singleton

Estructural

Adaptador, Puente, Compuesto,


Decorador, Fachada, Peso
Mosca, Proxy

De
Comportamiento

Cadena de Responsabilidad, Comando,


Iterador, Mediador, Memento,
Observador, Estado, Estrategia,
Visitante, Mtodo Plantilla

El Patrn Adaptador
El PD Adaptador convierte la interfaz de una clase en
otra interfaz que espera el cliente. El adaptador permite
que clases con interfaces incompatibles puedan funcionar
<<interface>>
juntas.
Client
ILogin

login(name,pass): Boolean

HotmailLogin
authenticate(name, pass): Boolean

adaptee

HotmailLoginAdapter
login(name, pass):
Boolean

Imagen obtenida del libro Head First Design Patterns, OReilly

El Patrn Decorador
El PD Decorador aade responsabilidades adicionales a
un objeto dinmicamente. Los decoradores proporcionan
una alternativa flexible a hacer subclases para extender
la funcionalidad.
Un objeto se puede
decorar con varios
decoradores

Cipher
Input
Stream
read()

Aade su propio
comportamiento antes o
despus de delegar en el
objeto que decora

Inflater
Input
Stream

InputStream

read()

FileInputStream

FileInputStream

read()

Decorator
read()

read()
read()

CipherInputStream
read()
Los decoradores tienen el
mismo supertipo que los
objetos que decoran

Imagen basada en el libro Head First Design Patterns, OReilly

InflaterInputStream
read()

El Patrn Fachada
El PD Fachada proporciona una interfaz unificada a un
conjunto de interfaces de un subsistema. La fachada
define una interfaz de alto nivel que hace al subsistema
ms fcil de usar.
Linkador

Editor

Depurador

Compilador
Clases del
subsistema de
compilacin

Compilar()

AnaSin

ASem

AnaLex

TabSim

Token

El Patrn Peso Mosca


El PD Peso Mosca(Flyweight) es compartir en forma
eficaz un conjunto de objetos de granularidad fina.

0 *
#flyweight
s

0 *

El Patrn Proxy
El PD Proxy proporciona un sustituto a otro objeto para
controlar su acceso.

Un objeto
que muestra
una imagen

<<interface>>

No sabe que est usando


un proxy. Para l resulta
totalmente transparente

Image

paintImage(Graph ics g)

ImageFile
paintImage(Graphics g)

ImageProxy
realImage

image.paintImage(g)

Un proxy de la
imagen
(ImageProxy)

realImage.paintImage(g)

Una imagen
(ImageFile)

Acta de proxy para


mostrar una imagen de
Loading mientras carga
la imagen

Es el objeto que carga la


imagen realmente

paintImage(Graphics g)

Clasificacin
Creacional

Fbrica Abstracta, Mtodo Fbrica,


Constructor, Prototipo, Singleton

Estructural

Adaptador, Puente, Compuesto,


Decorador, Fachada, Peso Mosca, Proxy

De
Comportamiento

Cadena de Responsabilidad, Comando,


Iterador, Mediador, Memento,
Observador, Estado, Estrategia,
Visitante, Mtodo Plantilla

El Patrn Estrategia
El PD Estrategia define una familia de algoritmos, los
encapsula y los hace intercambiables. Permite que el
algoritmo vare independientemente del cliente.
PreguntaAzar
CasillaCentral

pregunta(): Boolean

pregunta(): Boolean

formaPreguntar
<<interface>>

PreguntaElegida
preguntar(): Boolean

IFormaPreguntar
pregunta(): Boolean

PreguntaToda
s

preguntar(): Boolean

Estrategias
(Formas de preguntar)

El Patrn Mtodo Plantilla


El PD Mtodo Plantilla define el esqueleto de un
algoritmo en un mtodo, dejando algunos pasos a sus
subclases, es decir, deja que las subclases redefinan
ciertos pasos del algoritmo sin cambiar su estructura
public final void preparar() {

Bebida

hervir();

preparar()
hervir()
ponerEnVaso()
echar()
condimentar()

Mtodos
concretos
(finales)

Mtodo plantilla

echar();
ponerEnVaso();
condimentar();

Mtodo primitivo
(abstracto)

Caf
echar()

T
echar()
condimentar()

Mtodo gancho
(se da una implementacin por
defecto que se puede refinar
opcionalmente)

El Patrn Observador
El PD Observador define una dependencia uno-a-varios
entre objetos de manera que cuando un objeto cambia
de estado, se notifica a todas sus dependencias y se
actualizan automticamente.
<<interface>>
El sujeto
observado avisa a
los observadores
cuando se ha
producido algn
cambio
2%
C, 7

3
1

Observers

WeatherData
(Subject)

13
C,

ExternalDisplay
(Observer)

<<interface>>

Subject
register(Observer o)
remove(Observer
o)
notifyObservers()

observers

Observer
update(temp: float, hum: float)

StatisticsDisplay

72%

StatisticsDisplay
(Observer)

CurrentConditio
nsDisplay
(Observer)
Los observadores se
registran utilizando el
mtodo register

subject

update(temp, hum)
display()

ExternalDisplay
update(temp, hum)
display()

WeatherData
register(Observer o)
remove(Observer o)
notifyObservers()
getTemperature(): float
getHumidity(): float
measurementsChanged()

CurrentConditionsDisplay
subject

update(temp, hum)
display()

ndice
Introduccin
Patrones de diseo de uso comn
Bibliografa

Bibliografia
Basica (de referencia):
Patrones de diseo en Java, Laurent Debrauwer

De apoyo:
Patrones de diseo
http://www.oodesign.com/

You might also like