You are on page 1of 91

Patrones de diseo

Introduccin
Conceptos bsicos

Patrn de diseo: Base para la bsqueda de


soluciones a problemas comunes en el desarrollo de
software [...] (wikipedia)

Para que una solucin sea considerada un patrn


debe poseer ciertas caractersticas:
!
Efectivo resol"iendo proble#as si#ilares en
ocasiones anteriores.
!
Reutilizable: aplicable a diferentes proble#as de
diseo en distintas circunstancias.
Introduccin
Los patrones pretenden

Proporcionar cat$lo%os de elementos reusables en


el diseo de siste#as software.

Evitar la reiteracin en la bsqueda de soluciones a


proble#as &a conocidos & solucionados anterior#ente.

'or#ali(ar un vocabulario comn entre


diseadores.

Estandarizar el #odo en que se reali(a el diseo.

Facilitar el aprendizaje de las nue"as %eneraciones


de diseadores condensando conoci#iento e)istente.
Introduccin
Los patrones NO pretenden

I#poner ciertas alternati"as de diseo frente a otras.

*li#inar la creati"idad in+erente al proceso de diseo.


No es obligatorio utilizar los patrones.
*s aconse,able en el caso de tener el #is#o proble#a
o si#ilar que soluciona el patrn.
busar o forzar el uso de los patrones puede ser
un error.
Introduccin
Antipatrn

-n antipatrn de diseo es un patrn de diseo que


conduce a una #ala solucin para un proble#a.

*"itar los antipatrones sie#pre que sea posible.


requiere su reconoci#iento e identificacin dentro del
ciclo de "ida del software.

Patrn de diseo / Buen 0a#ino.

1ntipatrn de diseo / 2al 0a#ino.


2$s infor#acin sobre antipatrones de diseo aqu.
Introduccin
Por qu debo usar patrones?

3os patrones de diseo son soluciones bien


pensadas a problemas conocidos de pro%ra#acin.

2uc+os pro%ra#adores +an padecido de estos


proble#as antes & +an utili(ado estas 4soluciones5 para
ponerles re#edio.

6o rein"entar la rueda.
Introduccin
Un vocabulario comn

!lase abstracta: *s una clase que tiene al #enos un


#7todo abstracto que obli%a a que toda la clase sea
abstract

"erencia: 'acilita la creacin de ob,etos a partir de


otros &a e)istentes e i#plica que una subclase obtiene
todo el co#porta#iento (#7todos) & e"entual#ente los
atributos ("ariables) de su superclase (clase padre).

#nterface: 0ontiene cabeceras de #7todos &


constantes ("ariables finales). pero no i#ple#entacin
de #7todos o #ie#bros de datos no8finales.
Introduccin
Un vocabulario comn

Polimorfismo: se refiere a la capacidad para que


"arias clases deri"adas de una antecesora utilicen un
#is#o #7todo de for#a diferente (wikipedia).

$obre carga de m%todos: posibilidad de tener dos o


#$s #7todos con el #is#o no#bre pero funcionalidad
diferente.

&ranularidad: 9ensidad de cada ob,eto.


Introduccin
Un poco de !istoria

*n :;;< apareci el libro 4"esi#n Patterns$


%lements o& 'eusable Ob(ect Oriented )o&*are5
escrito por los a+ora fa#osos &ang of Four (=o').

&oF: *ric+ =a##a. >ic+ard ?el#. >alp+ @o+nson &


@o+n Alissides.
Bipos de patrones
"e estructura

Ce centran en proble#as relacionados con la for#a


de estructurar las clases.
"e creacin

>esuel"en proble#as relacionados con la creacin


de instancias de ob,etos.
"e comportamiento

Per#iten resol"er proble#as relacionados con el


co#porta#iento de la aplicacin. nor#al#ente en
tie#po de e,ecucin.
Bipos de patrones
"e creacin

1bstract factor&

'actor& #et+od

Cin%leton

Protot&pe

Builder
Bipos de patrones
"e estructura

1dapter

Brid%e

0o#posite

9ecorator

'acade

'l&wei%+t

Pro)&
Bipos de patrones
"e comportamiento +,-./

0+ain of responsibilit&

0o##and

Interpreter

Iterator

2ediator

2e#ento

Dbser"er
Bipos de patrones
"e comportamiento (2/2)

Ctate

Ctrate%&

Be#plate #et+od

Aisitor
Patrones de creacin
Abstract &actor0

Proporciona una clase que dele%a la creacin de una


o #$s clases concretas con el fin de entre%ar ob,etos
especficos.

*ste patrn puede ser utili(ado cuando:


!
3a creacin de ob,etos debe ser independiente
del siste#a que los utilice.
!
3os siste#as deben ser capaces de utili(ar
#ltiples fa#ilias de ob,etos.
!
Ce usan bibliotecas sin e)poner detalles de la
i#ple#entacin.
Patrones de creacin
Abstract &actor0
%(emplo
Abstract &actor0
Patrones de creacin
1actor0 met!od

9efine una interfaz para crear un ob,eto. pero de,a


que sean las subclases quienes decidan qu7 clase
instanciar. Per#ite que una clase dele%ue en sus
subclases la creacin de ob,etos.

*ste patrn puede ser utili(ado cuando:


!
-na clase no puede anticipar el tipo de ob,eto
que debe crear.
!
Cubclases pueden especificar qu7 ob,etos deben
ser creados.
Patrones de creacin
1actor0 met!od
%(emplo
1actor0 met!od
Patrones de creacin
)in#leton

=aranti(a que una clase slo ten%a una instancia. &


proporciona un punto de acceso %lobal a ella.

*ste patrn puede ser utili(ado cuando:


!
Ce requiere e'actamente una instancia de una
clase.
!
*s necesario acceso controlado a un solo ob,eto.
Patrones de creacin
)in#leton
%(emplo
)in#leton
Patrones de creacin
Protot0pe

0rear ob,etos #ediante clonacin basados en una


plantilla de ob,etos e)istentes .

*ste patrn puede ser utili(ado cuando (:EF):


!
3a co#posicin. creacin & representacin de los
ob,etos debe desacoplarse de un siste#a.
!
3as clases que se creen se especifican en
tie#po de e,ecucin.
!
Para un ob,eto e)isten un n#ero li#itado de
co#binaciones de estado .
Patrones de creacin
Protot0pe

*ste patrn puede ser utili(ado cuando (FEF):


!
Ce requiere que ob,etos o estructuras de ob,etos
sean id7nticos o se pare(can #uc+o a otros
ob,etos o estructuras e)istentes.
!
3a creacin inicial de cada ob,eto es una
operacin costosa.
Patrones de creacin
Protot0pe
%(emplo
Protot0pe
Patrones de creacin
2uilder

0entrali(a el proceso de creacin de un ob,eto en un


nico punto. de tal for#a que el #is#o proceso de
construccin pueda crear representaciones diferentes.

*ste patrn puede ser utili(ado cuando:


!
3os al%orit#os de creacin de ob,etos deben ser
desacoplados del siste#a.
!
Con obli%atorias #ltiples representaciones de
al%orit#os de creacin.
!
Ce requiere control sobre el proceso de creacin
en tie#po de e,ecucin.
Patrones de creacin
2uilder
%(emplo
2uilder
Patrones de estructura
Adapter

Per#ite traba,ar ,untas a clases con interfaces


diferentes a tra"7s de la creacin de un ob,eto co#n
#ediante el que puedan co#unicarse e interactuar.

*ste patrn puede ser utili(ado cuando:


!
-na clase no cu#ple los requisitos de interfa(.
!
0ondiciones co#ple,as 4atan5 el co#porta#iento
de los ob,etos a su estado.
!
3as transiciones entre los estados necesitan ser
e)plcitas.
Patrones de estructura
Adapter
%(emplo
Adapter
Patrones de estructura
2rid#e

9efine una estructura de ob,eto abstracto con


independencia de la i#ple#entacin con el fin de
li#itar el acopla#iento.

*ste patrn puede ser utili(ado cuando:


!
3as abstracciones e i#ple#entaciones no deben
ser dependientes en tie#po de co#pilacin.
!
3os ca#bios en la i#ple#entacin no deberan
tener i#pacto en los clientes.
!
3os detalles de la i#ple#entacin se deben
ocultar al cliente.
Patrones de estructura
2rid#e
%(emplo
2rid#e
Patrones de estructura
Composite

'acilita la creacin de ,erarquas de ob,etos donde


cada ob,eto se puede tratar de for#a independiente o
co#o un con,unto de ob,etos anidados a tra"7s de la
#is#a interfa(.

*ste patrn puede ser utili(ado cuando:


!
Ce necesitan representaciones ,er$rquicas de
ob,etos.
!
3os ob,etos & co#posiciones de ob,etos debe ser
tratados de #anera unifor#e.
Patrones de estructura
Composite
%(emplo
Composite
Patrones de estructura
"ecorator

1ade din$#ica#ente funcionalidad a un ob,eto.


Per#ite no tener que crear subclases incorporando la
nue"a funcionalidad. sino otras que la i#ple#entan &
se asocian a la pri#era.

*ste patrn puede ser utili(ado cuando:


!
*l co#porta#iento de ob,etos debe ser
din$#ica#ente #odificable.
!
3as funcionalidades especficas no deben residir
en la parte alta de la ,erarqua de ob,etos.
Patrones de estructura
"ecorator
%(emplo
"ecorator
Patrones de estructura
1acade

Proporciona una interfa( unificada para un con,unto


de interfaces de un subsiste#a. 9efine una interfa( de
alto ni"el que +ace que el subsiste#a sea #$s f$cil de
usar.

*ste patrn puede ser utili(ado cuando:


!
Ce necesita una interfa( si#ple para
proporcionar acceso a un siste#a co#ple,o.
!
?a& #uc+as dependencias entre las
i#ple#entaciones de siste#as & los clientes.
Patrones de estructura
1acade
%(emplo
1acade
Patrones de estructura
1l0*ei#!t

'acilita la reutili(acin de #uc+os ob,etos de 4grano


fino5. +aciendo #$s eficiente la utili(acin de %randes
cantidades de ob,etos.

*ste patrn puede ser utili(ado cuando:


!
Ce utili(an #uc+os ob,etos parecidos & los
costes de al#acena#iento son altos.
!
-nos pocos ob,etos co#partidos se pueden
sustituir por #uc+os no co#partidos.
!
6o tiene i#portancia la identidad de cada ob,eto.
Patrones de estructura
1l0*ei#!t
%(emplo
1l0*ei#!t
Patrones de estructura
Pro30

-na clase que per#ite operar con un ob,eto de otra


clase e)poniendo una o #$s de sus interfaces.

*ste patrn puede ser utili(ado cuando:


!
*l ob,eto representado es e)terno al siste#a.
!
3os ob,etos se deben crear ba,o de#anda.
!
Ce requiere control de acceso para el ob,eto
ori%inal.
!
Ce requiere aadir funcionalidad cuando se
accede a un ob,eto.
Patrones de estructura
Pro30
%(emplo
Pro30
Patrones de co#porta#iento
C!ain o& responsibilit0

*"ita acoplar el e#isor de una peticin a su receptor


dando a #$s de un ob,eto la posibilidad de responder a
una peticin.

*ste patrn puede ser utili(ado cuando:


!
2$s de un ob,eto puede #ane,ar una peticin. &
el #ane,ador no se conoce a priori.
!
Ce quiere en"iar una peticin a un ob,eto entre
"arios sin especificar e)plcita#ente el receptor.
!
*l con,unto de ob,etos que puede tratar una
peticin debera ser especificado din$#ica#ente.
Patrones de co#porta#iento
C!ain o& responsibilit0
%(emplo
C!ain o& responsibilit0
Patrones de co#porta#iento
Command

Per#ite solicitar una operacin a un ob,eto sin


conocer real#ente el contenido de esta operacin. ni el
receptor real de la #is#a. Para ello se encapsula la
peticin co#o un ob,eto. con lo que ade#$s se facilita
la para#etri(acin de los #7todos.

*ste patrn puede ser utili(ado para (:EF):


!
'acilitar la para#etri(acin de las acciones a
reali(ar.
!
Independi(ar el #o#ento de peticin del de
e,ecucin.
Patrones de co#porta#iento
Command

*ste patrn puede ser utili(ado para (FEF):


!
I#ple#entar 0allBacks. especificando que
rdenes quere#os que se e,ecuten en ciertas
situaciones.
!
Coportar el Gdes+acerG.
!
9esarrollar siste#as utili(ando rdenes de alto
ni"el que se constru&en con operaciones sencillas
(pri#iti"as).
Patrones de co#porta#iento
Command
%(emplo
Command
Patrones de co#porta#iento
4nterpreter

9efine una representacin para su %ra#$tica ,unto


con un int7rprete del len%ua,e.

*ste patrn puede ser utili(ado cuando:


!
Ce quiere definir un len%ua,e para representar
e)presiones re%ulares que representen cadenas a
buscar dentro de otras cadenas.
!
Ce pretende definir un len%ua,e que per#ita
representar las distintas instancias de una fa#ilia
de proble#as.
Patrones de co#porta#iento
4nterpreter
%(emplo
4nterpreter
Patrones de co#porta#iento
4terator

9efine una interfa( que declara los #7todos


necesarios para acceder secuencial#ente a un %rupo
de ob,etos de una coleccin.

1l%unos de los #7todos co#unes que se definen en


la interfa( Iterador son:
!
Pri#ero()
!
Ci%uiente()
!
?a&2as()
!
*le#ento1ctual()
Patrones de co#porta#iento
4terator

*ste patrn puede ser utili(ado cuando:


!
Ce necesita tener acceso a ele#entos sin tener
acceso a toda la representacin.
!
Ce pretenden +acer recorridos #ltiples o
concurrentes de los ele#entos.
!
*)isten diferencias sutiles entre los detalles de
i#ple#entacin de "arios iteradores.
Patrones de co#porta#iento
4terator
%(emplo
4terator
Patrones de co#porta#iento
5ediator

9efine un ob,eto que encapsula la #anera en que


interactan un con,unto de ob,etos entre ellos.

*ste patrn puede ser utili(ado cuando:


!
3a co#unicacin entre los con,untos de ob,etos
est$ bien definido & es co#ple,o.
!
*)isten de#asiadas relaciones & se necesita un
punto co#n de control o co#unicacin.
Patrones de co#porta#iento
5ediator
%(emplo
5ediator
Patrones de co#porta#iento
5emento

Cu finalidad es al#acenar el estado de un ob,eto (o


del siste#a co#pleto) en un #o#ento dado de #anera
que se pueda restaurar en ese punto de #anera
sencilla.

*ste patrn puede ser utili(ado cuando:


!
*l estado interno de un ob,eto debe ser %uardado
& restaurado en un #o#ento posterior.
!
*l estado interno no se puede e)poner #ediante
interfaces sin e)poner la i#ple#entacin.
Patrones de co#porta#iento
5emento
%(emplo
5emento
Patrones de co#porta#iento
Observer

9efine una dependencia del tipo uno8a8#uc+os entre


ob,etos. de #anera que cuando uno de los objetos
cambia su estado( notifica este cambio a todos los
dependientes.

*ste patrn puede ser utili(ado cuando:


!
Ce necesita consistencia entre clases
relacionadas. pero con independecia.
!
3os ca#bios de estado en uno o #$s ob,etos
deben dar lu%ar a co#porta#iento en otros
ob,etos
Patrones de co#porta#iento
Observer
%(emplo
Observer
Patrones de co#porta#iento
)tate

Ce utili(a cuando el co#porta#iento de un ob,eto


ca#bia dependiendo del estado del #is#o.

*,e#plo: una alar#a puede tener diferentes estados:


desactivada. activada. en configuracin, etc. *n este
caso se puede definir una interfa( Estado_Alarma. &
lue%o definir los diferentes estados.

*ste patrn puede ser utili(ado cuando se per#ite a


un ob,eto alterar su co#porta#iento se%n el estado
interno en que se encuentre.
Patrones de co#porta#iento
)tate
%(emplo
)tate
Patrones de co#porta#iento
)trate#0

Per#ite #antener un con,unto de al%orit#os de entre


los cuales el ob,eto cliente puede ele%ir aquel que le
con"iene e interca#biarlo din$#ica#ente se%n sus
necesidades.

*ste patrn puede ser utili(ado cuando:


!
3a nica diferencia entre #uc+as clases
relacionadas es su co#porta#iento.
!
Ce requieren #ltiples "ersiones de un al%orit#o.
!
*l co#porta#iento de una clase debe ser
definido en tie#po de e,ecucin.
Patrones de co#porta#iento
)trate#0
%(emplo
)trate#0
Patrones de co#porta#iento
6emplate met!od

9efine dentro de una operacin de una superclase.


los pasos de un al%orit#o. de for#a que todos o parte
de estos pasos son redefinidos en las subclases
+erederas de la citada superclase.

*ste patrn puede ser utili(ado cuando:


!
*l co#porta#iento co#n entre subclases debe
estar locali(ado en una clase co#n.
!
3as clases padre deben ser capaces de in"ocar
de #anera unifor#e en el co#porta#iento de sus
subclases.
Patrones de co#porta#iento
6emplate met!od
%(emplo
6emplate met!od
Patrones de co#porta#iento
7isitor

Per#ite aplicar una o #$s operaciones a un con,unto


de ob,etos en tie#po de e,ecucin. desacoplando
dic+as operaciones de la estructura del ob,eto.

*ste patrn puede ser utili(ado:


!
0uando la estructura del ob,eto no se puede
ca#biar. pero s las operaciones que reali(a.
!
1#plia#ente en int7rpretes. co#piladores &
procesadores de len%ua,es. en %eneral.
Patrones de co#porta#iento
7isitor
%(emplo
7isitor
0onclusiones
8%ure9a:
Cono;co los patrones de dise<o
0a puedo resolver 6O"O) mis problemas
Hproble#aI
Hproble#aI
Hproble#aI
Hproble#aI
Patrn
Patrn
Patrn
Patrn
Hproble#aI
Hproble#aI
Hproble#aI
Hproble#aI
... ...
0onclusiones
Hproble#aI
Hproble#aI
Hproble#aI
Hproble#aI
Patrn
Pensar
Pensar
Patrn
Hproble#aI
Hproble#aI
Hproble#aI
... ...
8Nooooooooooo:
No intentar aplicar los patrones de dise<o
=con cal;ador>
Patrones de diseo
'e&erencias

Jikipedia:
+ttp:EEen.wikipedia.or%EwikiE9esi%nKpatternK(co#puterKs
cience)

Patrones con e,e#plos en @a"a:


+ttp:EEsource#akin%.co#Edesi%nKpatterns

*ric+ =a##a. >ic+ard ?el#. >alp+ @o+nson. @o+n


Alissides. 9esi%n Patterns 09. 1ddison8Jesle& :;;L.

@arosla" Bulac+. Practical 1PI 9esi%n: 0onfessions of


a @a"a 'ra#ework 1rc+itect. 1P>*CC FMML.
Patrones de diseo
'e&erencias

Bi#ot+& =. 2attson. Be"erl& 1. Canders. Berna 3.


2assin%ill. Patterns for Parallel Pro%ra##in%. 1ddison8
Jesle& FMML.

9(one (dia%ra#as de clases. definiciones. etc.):


+ttp:EE,a"a.d(one.co#EarticlesEdesi%n8patterns8factor&

3os e,e#plos se +an adaptados de la p$%ina:


+ttp:EEwww.fluff&cat.co#E@a"a89esi%n8PatternsE
FIN
Patrones de diseo
#)er !anarias
i)er.canarias *gmail+

You might also like