Está en la página 1de 43

NDICE

Patrones de Creacin............................................................................................................................5 Abstract Factory (Creacional de Objetos).......................................................................................5 Builder (Creacional de objetos).......................................................................................................6 Factory Method (Creacional de clases)...........................................................................................8 Prototy e (Creacional de objetos)....................................................................................................! "in#leton (Creacional de objetos)..................................................................................................$$ Patrones estructurales.........................................................................................................................$% Ada ter (&structural de Clases y Objetos).....................................................................................$% Brid#e (&structural de Objetos).....................................................................................................$5 Co' osite (&structural de objetos)................................................................................................$( )ecorator (&structural de Objetos)................................................................................................$! Facade (&structural de objetos)......................................................................................................*$ Fly+ei#ht (&structural de objetos).................................................................................................** Pro,y (&structural de objetos).......................................................................................................*)iscusin sobre los atrones estructurales....................................................................................*6 Patrones de co' orta'iento..............................................................................................................*! Chain O. /es osability (Co' orta'iento de Objetos).................................................................*! Co''and (Co' orta'iento de objetos).......................................................................................%$ 0nter reter.......................................................................................................................................%* 0terator............................................................................................................................................%Mediator.........................................................................................................................................%5 Me'ento........................................................................................................................................%( Obser1er.........................................................................................................................................%8 "tate...............................................................................................................................................-2 "trate#y..........................................................................................................................................-$ 3e' late Method...........................................................................................................................-% 4isitor.............................................................................................................................................-/elaciones entre los atrones.............................................................................................................-(

PATRONES DE CREACIN
5os atrones de dise6o de creacin abstraen el roceso de creacin de instancias. Ayudan a hacer un siste'a inde endiente de c'o se crean7 se co' onen y se re resentan sus objetos. 8n atrn de creacin de clases usa la herencia ara ca'biar la clase de la instancia a crear7 'ientras 9ue un atrn de creacin de objetos dele#a la creacin de la instancia en otro objeto.

Abstract Factory (Creacional de Objetos)


Pro orciona un inter.ace ara crear .a'ilias de objetos relacionados o de endientes entre si7 sin es eci.icar sus clases concretas. &l atrn Abstract Factory est: aconsejado cuando se re1; la inclusin de nue1as .a'ilias de roductos7 ero uede resultar contra roducente cuando se a6aden nue1os roductos o ca'bian los e,istentes7 uesto 9ue a.ectar<a a todas las .a'ilias creadas.

Figura 1: Abstract Factory (Factora Abstracta)

Aplicabilidad 8n siste'a debe ser inde endiente de c'o se crean7 co' onen y re resentan sus roductos. 8n siste'a debe ser con.i#urado con una .a'ilia de roductos7 entre 1arias. 8na .a'ilia de objetos roducto relacionado est: dise6ada ara ser usada conjunta'ente y es necesario hacer cu' lir esta restriccin. "e 9uiere ro orcionar una biblioteca de clases de roductos y solo se 9uiere re1elar sus inter.aces7 no sus i' le'entaciones.

Participantes FbricaAbstracta. )eclara un inter.a= ara o eraciones 9ue crean objetos roducto abstractos. FbricaConcreta. 0' le'enta las o eraciones ara crear objetos roducto concretos. ProductoAbstracto. )eclara una inter.a= ara un ti o de objeto roducto. ProductoConcreto. )e.ine un objeto roducto ara 9ue sea creado corres ondiente. 0' le'enta la inter.a= ProductoAbstracto. or la .:brica

Cliente. "lo usa inter.aces declaradas or las clases F:bricaAbstracta y ProductoAbstracto.

Figura 2: Abstract Factory. Ejemplo de uso.

Colaboraciones >or'al'ente se crea una ?nica instancia de una clase F:bricaConcreta en tie' o de ejecucin. &sta .:brica concreta crea objetos roducto 9ue tienen una deter'inada i' le'entacin. Para crear di.erentes objetos roducto7 los clientes deben usar una .:brica concreta di.erente. F:bricaAbstracta dele#a la creacin de objetos roductos en su subclase F:bricaConcreta. Consecuencias A<sla las clases concretas. Facilita el interca'bio de .a'ilias de roductos. Pro'ue1e la consistencia entre roductos. &s di.<cil dar cabida a nue1os ti os de roductos.

Patrones relacionados 5as clases F:bricaAbstracta suelen i' le'entarse con ';todos de .abricacin ( atrn Factory Method)7 ero ta'bi;n se ueden i' le'entar usando rototi os ( atrn Prototy e). 8na .:brica concreta suele ser un "in#leton.

!"ilder (Creacional de objetos)


"e ara la construccin de un objeto co' lejo de su re resentacin7 de .or'a 9ue el 'is'o roceso de construccin ueda crear di.erentes re resentaciones del objeto. Aplicabilidad Cuando el al#orit'o ara crear un objeto deba ser inde endiente de las artes de 9ue se co' one dicho objeto y de c'o se ensabla. Cuando el roceso de construccin debe er'itir di.erentes re resentaciones del objeto 9ue est: siendo constru<do.
#

Figura !: Builder. Ejemplo de uso.

Participantes Constructor. &s eci.ica una inter.a= abstracta ara crear las artes de un objeto Producto. ConstructorConcreto. 0' le'enta la inter.a= constructor ara construir y ensa'blar las artes del roducto. )e.ine la re resentacin a crear. Pro orciona una inter.a= ara de1ol1er el roducto. Director. Construye un objeto usando la inter.a= constructor. Producto. /e resenta el objeto co' lejo en construccin. &l ConstructorConcreto construye la re resentacin interna del roducto y de.ine el roceso de ensa'blaje. 0ncluye las clases 9ue de.inen sus artes constituyentes7 incluyendo inter.aces ara ensablar las artes en el resultado .inal.

Figura 4: Builder (Co structor)

Colaboraciones &l cliente crea el objeto )irector y lo con.i#ura con el objeto constructor deseado. &l )irector noti.ica al constructor cada 1e= 9ue hay 9ue construir una arte de un roducto. &l constructor 'aneja las eticiones del director y las a6ade al roducto. &l cliente obtiene el roducto del constructor.

Consecuencias Per'ite 1ariar la re resentacin interna de un roducto. A<sla el cdi#o de construccin y re resentacin. Pro orciona un control ':s .ino sobre el roceso de construccin.

Patrones relacionados &l atrn Abstract Factory se arece a un Builder en 9ue ta'bi;n uede construir objetos co' lejos. 5a rinci al di.erencia es 9ue el atrn Builder se centra en construir un objeto co' leto aso a aso. &l Abstract Factory hace hinca i; en .a'ilias de objetos roducto (si' les o co' lejos). &l Builder de1uel1e el roducto co'o aso .inal7 'ientras 9ue el Abstract Factory lo de1uel1e in'ediata'ente.

Factory %et&od (Creacional de clases)


)e.ine una inter.a= ara crear un objeto7 ero deja 9ue sean las subclases 9uienes decidan 9u; clase instanciar. Per'ite 9ue una clase dele#ue en sus subclases la creacin de objetos.

Figura ": Factory #et$od (#%todo de Fabricaci& )

Aplicabilidad Cuando una clase no uede re1er la clase de objetos 9ue debe crear. 8na clase 9uiere 9ue sean sus subclases 9uienes es eci.i9uen los objetos 9ue ;sta crea. Cuando las clases dele#an la res onsabilidad en una de entre 1arias clases au,iliares y 9uere'os locali=ar 9u; subclase au,iliar concreta es en la 9ue se dele#a.

Participantes Producto. )e.ine la inter.a= de los objetos 9ue crea el ';todo de .abricacin. ProductoConcreto. 0' le'enta la inter.a= Producto. Creador. )eclara el ';todo de .abricacin7 el cual de1uel1e un objeto de ti o Producto. 3a'bi;n uede de.inir una i' le'entacin redeter'inada del ';todo de .abricacin 9ue de1uel1a un objeto ProductoConcreto. CreadorConcreto. /ede.ine el ';todo de .abricacin ProductoConcreto. ara de1ol1er una instancia de un

Consecuencias 5os ';todos de .abricacin eli'inan la necesidad de li#ar clases es ec<.icas de la a licacin a nuestro
'

cdi#o. &l cdi#o solo trata con la inter.a= Producto@ ade':s uede .uncionar con cual9uier clase ProductoConcreto de.inida or el usuario. 8n incon1eniente otencial de los ';todos de .abricacin es 9ue los clientes ueden tener 9ue heredar de la clase Creador s<' le'ente ara crear un deter'inado objeto ProductoConcreto7 introduciendo una nue1a 1<a de .uturos ca'bios. Pro orciona en#anches ara las subclases. Crear objetos dentro de una clase con un ';todo de .abricacin es sie' re ':s .le,ible 9ue hacerlo directa'ente. Conecta jerar9u<as de clases aralelas. 5as jerar9u<as de clases aralelas se roducen cuando una clase dele#a al#una de sus res onsabilidades a una clase se arada.

Figura ': Factory #et$od. Ejemplo de uso.

Patrones relacionados &l atrn AbstractFactory suele i' le'entarse con ';todos de .abricacin. 5os ';todos de .abricacin #eneral'ente son lla'ados desde el interior de M;todosPlantilla (3e' late Methods). &n el eje' lo7 >ue1o)ocu'ento es un ';todo lantilla. &l Prototy e no necesita heredar de Creador. "in e'bar#o suelen re9uerir una o eracin 0niciali=ar en la clase Producto. &l Creador usa 0niciali=ar ara iniciali=ar el objeto. &l atrn FactoryMethod no re9uiere dicha o eracin.

Prototy(e (Creacional de objetos)


&s eci.ica el ti o de objetos a crear usando una instancia 'ediante la co ia de ese rototi o. Aplicabilidad &l atrn Prototy e se utili=a cuando un siste'a debe ser inde endiente de c'o son creados7 se co' onen y se re resentan sus roductos@ y Cuando las clases a instanciar son es eci.icadas en tie' o de ejecucicn7 or eje' lo 'ediante car#a din:'ica@ o Para e1itar construir una jerar9u<a de clases de .:bricas aralela a la jerar9u<a de clases de los roductos@ o Cuando las instancias de una clase uedan tener uno de entre slo unos ocos estados di.erentes. Puede ser ':s adecuado tener un n?'ero e9ui1alente de rototi os y clonarlos en 1e= de crear 'anual'ente instancias de la clase cada 1e= con el estado a ro iado. rotot< ica y creando nue1os objetos

Figura (: )rototye ()rototipo)

Participantes Prototipo. )eclara una inter.a= ara clonarse. PrototipoConcreto. 0' le'enta una o eracin ara clonarse. Cliente. Crea un nue1o objeto idiendo a un rototi o 9ue se clone.

Figura *: )rototype. Ejemplo de uso.

Consecuencias Muchas de las consecuencias del atrn Prototy e son las 'is'as 9ue las de los atrones Abstract Factory y BuilderA oculta al cliente las clases roducto concretas7 reduciendo as< el n?'ero de no'bres 9ue conocen los clientes. Ade':s7 er'iten 9ue un cliente use clases es ec<.icas de la a licacin sin ca'bios. Ade':s er'itenA A6adir y eli'inar roductos en tie' o de ejecucin. &s eci.icar nue1os objetos 'odi.icando 1alores. &s eci.icar nue1os objetos 1ariando la estructura. /educen la herencia.
*

Con.i#urar din:'ica'ente una a licacin con clases.

Patrones relacionados Prototy e y Abstract Factory son atrones ri1ales en al#unos as ectos7 aun9ue ta'bi;n ueden usarse juntos. 8na .:brica abstracta uede al'acenar un conjunto de rototi os a artir de los cuales clonar y de1ol1er objetos roducto. 5os dise6os 9ue hacen uso intensi1o de los atrones Co' osite y )ecorator suelen bene.iciarse ta'bi;n de Prototy e.

Sin+leton (Creacional de objetos)


Baranti=a 9ue una clase solo ten#a una instancia y ro orciona un unto de acceso a ella.

Figura +: ,i gleto (- ico)

Aplicabilidad Cuando deba haber e,acta'ente una instancia de una clase y esta deba estar accesible a los clientes desde un unto de acceso conocido. Cuando la ?nica instancia deber<a ser e,tensible 'ediante herencia y los clientes deber<an ser ca aces de usar una instancia e,tendida sin 'odi.icar su cdi#o.

Participantes Singleton. )e.ine una o eracin 0nstancia 9ue er'ite 9ue los clientes accedan a su ?nica instancia. 0nstancia es una o eracin de clase (est:tica). Puede ser res onsable de crear su ?nica instancia.

Consecuencias &l atrn ro orciona 1arios bene.iciosA Acceso controlado a una ?nica instancia. &s acio de no'bres reducido. Per'ite el re.ina'iento de o eraciones y la re resentacin. "e uede crear una subclase de la clase "in#leton y es .:cil con.i#urar una a licacin con una instancia de esta clase e,tendida. Per'ite un n?'ero 1ariable de instancias. &l atrn hace 9ue sea .:cil ca'biar de o inin y er'itir ':s de una instancia de la clase. M:s .le,ible 9ue las o eraciones de clase.

Patrones relacionados Cay 'uchos atrones 9ue ueden i' le'entarse usando el atrn "in#leton7 co'o Abstract Factory7 Builder y Prototy e.

-.

PATRONES ESTR/CT/RA0ES
5os atrones estructurales se ocu an de c'o se co'binan las clases y los objetos ara .or'ar estructuras ':s #randes. 5os atrones estructurales de clases hacen uso de la herencia ara co' oner inter.aces o i' le'entaciones. 5os atrones estructurales de objetos describen .or'as de co' oner objetos ara obtener nue1a .uncionalidad. 5a .le,ibilidad a6adida de la co' osicin de objetos 1iene dada or la ca acidad de ca'biar la co' osicin en tie' o de ejecucin.

Ada(ter (Estr"ct"ral de Clases y Objetos)


Con1ierte la inter.a= de una clase en otra inter.a= 9ue es la 9ue es eran los clientes. Per'ite 9ue coo eren clases 9ue de otra .or'a no odr<an or tener inter.aces inco' atibles.

Figura 1.: Adapter/ como adaptador de clases utili0a la $ere cia m1ltiple

Aplicabilidad Cuando se 9uiere usar una clase e,istente y su inter.a= no concuerda con la 9ue se necesita. "e 9uiere crear una clase reutili=able 9ue coo ere con clases no relacionadas o 9ue no han sido re1istas7 es decir7 clases 9ue no tienen or 9u; tener inter.aces co' atibles. "ola'ente en el caso de un ada tador de objetos7 cuando es necesario usar 1arias subclases e,istentes ero no resulta r:ctico ada tar su inter.a= heredando de cada una de ellas. 8n ada tador de objetos uede ada tar la inter.a= de su clase adre.

Figura 11: Adapter de objetos/ basado e la composici& de objetos

Participantes Objetivo. )e.ine la inter.a= es ec<.ica del do'inio 9ue usa el cliente. Cliente. Colabora con objetos 9ue se ajustan a la inter.a= Objeti1o.
--

Adaptable. )e.ine una inter.a= e,istente 9ue necesita ser ada tada. Adaptador. Ada ta la inter.a= de Ada table a la inter.a= Objeti1o

Figura 12: Adapter/ ejemplo de uso

Colaboraciones 5os clientes lla'an a o eraciones de una instancia de Ada tador. A su 1e=7 el ada tador lla'a a o eraciones de Ada table7 9ue seon las 9ue satis.acen la eticin. Consecuencias 8n ada tador de claseA Ada ta una clase Ada table a Objetico7 ero se re.iere ?nica'ente a una clase Ada table concreta. 8n ada tador no ser1ir: ara ada tar una clase y todas sus subclases. Per'ite 9ue Ada atador rede.ina arte del co' orta'iento de Ada table7 or ser Ada tador una subclase de Ada table. 0ntroduce un solo objeto y no se necesita nin#?n untero de indireccin adicional ara obtener el objeto ada tado. Per'ite 9ue un 'is'o Ada tador .uncione con 'uchos Ada tables. &l Ada tador ta'bi;n uede a6adir .uncionalidad a todos los Ada tables a la 1e=. Cace 9ue sea ':s di.<cil rede.inir el co' orta'iento de Ada table. "e necesitar<a crear una subclase de Ada table y hacer 9ue el ad atador se re.iera a la subclase en 1e= de a la clase Ada table en s<.

8n ada tador de objetosA

Patrones relacionados &l atrn Brid#e tiene una estructura si'ilar a un ada tador de objetos7 ero con un ro sito un oco di.erenteA est: ensado ara se arar una inter.a= de su i' le'entacin de 'anera 9ue a'bos uedan ca'biar .:cil'ente y de .or'a inde endiente uno del otro7 'ientras 9ue un ada tador est: ensado ara ca'biar la inter.a= de un objeto e,istente. &l atrn )ecorator decora otro objeto sin ca'biar su inter.a=. 8n decorador es7 or tanto7 ':s trans arente a la a licacin 9ue un ada tador. Co'o resultado7 el atrn )ecorator er'ite la co' osicin recursi1a7 lo 9ue no es osible con ada tadores uros. &l atrn Pro,y de.ine un re resentante o sustituto de otro objeto sin ca'biar su inter.a=.

-1

!rid+e (Estr"ct"ral de Objetos)


)esaco la una abstraccin de su i' le'entacin7 de 'odo 9ue a'bas inde endiente. uedan 1ariar de .or'a

Figura 1!: Bridge

Aplicabilidad Cuando se 9uiere e1itar un enlace er'anente entre una abstraccin y su i' le'entacin. Por eje' lo7 cuando debe seleccionarse o ca'biarse la i' le'entacin en tie' o de ejecucin. Cuando tanto las abstracciones co'o sus i' le'entaciones deber<an ser e,tensibles 'ediante subclases. &n este caso7 el atrn Brid#e er'ite co'binar las di.erentes abstracciones y sus i' le'entaciones y e,tenderlas inde endiente'ente. Cuando los ca'bios en la i' le'entacin de una abstraccin no deber<an tener i' acto en los clientes@ es decir7 su cdi#o no tendr<a 9ue ser reco' ilado. Cuando 9uiera ocultar co' leta'ente a los clientes la i' le'entacin de una abstraccin. &n CDD la re resentacin de una clase es 1isible en la inter.a= de la 'is'a. Cuando ten#a una roli.eracin de clases co'o la 'ostrada en la Fi#ura $-. 8na jerar9u<a de clases tal one de 'ani.iesto la necesidad de di1idir un objeto en dos artes. /u'bau#h usa el t;r'ino Ege erali0acio es a idadasF ara re.erirse a dichas jerar9u<as de clases. Cuando 9uiera co' artir una i' le'entacin entre 1arios objetos (tal 1e=7 usando un contador de re.erencias) y este hecho deba er'anecer oculto al cliente.

Participantes Abstraccin. )e.ine la inter.a= de la abstraccin. Mantiene una re.erencia a un objeto de ti o 0' le'entador. AbstraccinRefinada. &,tiende la inter.a= de.inida or Abstraccin. Implementador. )e.ine la inter.a= de las clases de i' le'entacin. &sta inter.a= no tiene or 9u; corres onderse e,acta'ente con la de Abstraccin. )e hecho7 a'bas inter.aces ueden ser 'uy distintas. >or'al'ente la inter.a= 0' le'entador slo ro orciona o eraciones ri'iti1as7 y Abstraccin de.ine o eraciones de ':s alto ni1el basadas en dichas ri'iti1as.

ImplementadorConcreto. 0' le'enta la inter.a= 0' le'entador y de.ine su i' le'entacin concreta.

Figura 14: Bridge. Ejemplo de uso.

Colaboraciones Abstraccin rediri#e las eticiones del cliente a su objeto 0' le'entador. Consecuencias )esaco la la inter.a= y la i' le'entacin. >o une er'anente'ente una i' le'entacin a una inter.a=7 sino 9ue la i' le'entaciG uede con.i#urarse en tie' o de ejecucin. )esaco lar Abstraccin e 0' le'entador ta'bi;n eli'ina de la i' le'entacin de endencias de tie' o de co' ilacin. Ca'biar una clase no re9uiere reco' ilar la clase Abstraccin y sus clientes. Mejora la e,tensibilidad. Pode'os e,tender las jerar9u<as de Abstraccin y de 0' le'entador de .or'a inde endiente. Oculta detalles de i' le'entacin a los clientes. Pode'os aislar a los clientes de los detalles de i' le'entacin7 co'o el co' arti'iento de objetos i' le'entadores y el corres ondiente 'ecanis'o de conteo de re.erencias7 si es 9ue hay al#uno.

Patrones relacionados &l atrn AbstractFactory uede crear y con.i#urar un Brid#e. &l atrn Ada ter est: orientado a conse#uir 9ue trabajen juntas clases 9ue no est:n relacionadas. >or'al'ente se a lica a siste'as 9ue ya han sido dise6ados. &l atrn Brid#e7 or otro lado7 se usa al co'en=ar un dise6o ara er'itir 9ue abstracciones e i' le'entaciones 1ar<en inde endiente'ente unas de otras.

Co2(osite (Estr"ct"ral de objetos)


Co' one objetos en estructuras de :rbol ara re resentar jerar9u<as de arteHtodo. Per'ite 9ue los clientes traten de 'anera uni.or'e a los objetos indi1iduales y a los co' uestos.
-#

Figura 1": Composite (Compuesto)

Aplicabilidad Cuando se 9uiera re resentar jerar9u<as de objetos arteHtodo7 co'o en un objeto #r:.ico 9ue contiene otros objetos #r:.icos. Cuando se 9uiera 9ue los clientes sean ca aces de ob1iar las di.erencias entre co' osiciones de objetos y los objetos indi1iduales. 5os clientes tratar:n a todos los objetos de la estructura co' uesta de 'anera uni.or'e.

Figura 1': Composite. 2rga i0aci& co ceptual

Participantes Componente. )eclara la inter.a= de los objetos de la co' osicin. 0' le'enta el co' orta'einto redeter'inado de la inter.a= 9ue es co'?n a todas las clases. )eclara un inter.a= ara acceder a sus co' onentes hijos y #estionarlos. O cional'ente7 de.ine una inter.a= ara acceder al adre de un co' onente en la estructura recursi1a y7 si es necesario7 la i' le'enta. oja. /e resenta ele'entos $oja en la co' osicin. 8na $oja no tiene hijos. Compuesto. !)e.ine el co' orta'iento de los co' onentes 9ue tienen hijos. Al'acena co' onentes hijos. 0' le'enta las o eraciones de la inter.a=. Co' onente relacionado con los hijos.

-$

Cliente. Mani ula objetos en la co' osicin a tra1;s de la inter.a= Co' onente.

Figura 1(: Composite. Ejemplo de uso.

Colaboraciones 5os clientes usan la inter.a= de la clase Co' onente ara interactuar con los objetos de la estructura co' uesta. "i el reci iente es una Coja7 la eticin se trata correcta'ente. "i es un Co' uesto7 nor'al'ente rediri#e las eticiones a sus co' onentes hijos7 osible'ente reali=ando o eraciones adicionales antes o des u;s. Consecuencias )e.ine jerar9u<as de clases .or'adas or objetos ri'iti1os y co' uestos. 5os objetos ri'iti1os ueden co' onerse en otros objetos ':s co' lejos7 9ue a su 1e= ueden ser co' lejos7 as< de 'anera recurrente. All< donde el cdi#o es ere recibir un objeto ri'iti1o7 ta'bi;n odr: recibir un objeto co' uesto. "i' li.ica el cliente. 5os clientes ueden tratar uni.or'e'ente a las estructuras co' uestas y a los objetos indi1iduales. 5os clientes nor'al'ente no conocen (y no les deber<a i' ortar) si est:n tratando con una hoja o con un co' onente co' uesto. &sto si' li.ica el cdi#o del cliente7 uesto 9ue e1ita tener 9ue escribir .unciones con instrucciones if anidadas en las clases 9ue de.inen la co' osicin. Facilita a6adir nue1os ti os de co' onentes. "i se de.inen nue1as subclases Co' uesto u Coja7 estas .uncionar:n auto':tica'ente con las estructuras y el cdi#o cliente e,istentes. >o hay 9ue ca'biar los clientes ara las nue1as clases Co' onente. Puede hacer 9ue un dise6o sea de'asiado #eneral. 5a des1entaja de .acilitar a6adir nue1os co' onentes es 9ue hace ':s di.<cil restrin#ir los co' onentes de un co' uesto. A 1eces 9uere'os 9ue un co' uesto solo ten#a deter'inados co' onentes. Con el atrn Co' osite no ode'os con.iar en el siste'a de ti os ara 9ue ha#a co' lir estas restricciones or nosotros. &n 1e= de eso7 tendre'os 9ue usar co' robaciones en tie' o de ejecucin.

Patrones relacionados Muchas 1eces se usa el enlace al co' onente ara i' le'entar el atrn Chain o. /es osability. &l atrn )ecorator suele usarse junto con el Co' osite. Cuando se usan juntos decoradores y co' uestos7 nor'al'ente a'bos tendr:n una clase adre co'?n. Por tanto7 los decoradores tendr:n 9ue ad'itir la inter.a= Co' onente con o eraciones co'o A6adir7 &li'inar y ObtenerCijo.
-'

&l atrn Fly+ei#ht er'ite co' artir co' onentes7 si bien en ese caso ;stos ya no ueden re.erirse a sus adres. "e uede usar el atrn 0terator ara recorrer las estructuras de.inidas or el atrn Co' osite. &l atrn 4isitor locali=a o eraciones y co' orta'iento 9ue de otro 'odo estar<a distribu<do en 1arias clases Co' uesto y Coja.

Decorator (Estr"ct"ral de Objetos)


Asi#na res onsabilildades a un objeto din:'ica'ente7 ro orcionando una alternati1a .le,ible a la herencia ara e,tender la .uncionalidad.

Figura 1*: 3ecorator. (3ecorador)

Aplicabillidad Para a6adir objetos indi1iduales de .or'a din:'ica y trans arente7 es decir7 sin a.ectar a otros objetos. Para res osabilidades 9ue ueden ser retiradas. Cuando la e,tensin 'ediante la herencia no es 1iable. A 1eces es osible tener un #ran n?'ero de e,tensiones inde endientes7 roduc<endose una e, losin de subclases ara er'itir todas las co'binaciones. O uede ser 9ue una de.inicin de una clase est; oculta o 9ue no est; dis onible ara ser heredada.

Participantes Componente. )e.ine la inter.a= ara objetos a los 9ue se uede a6adir res onsabilidades din:'ica'ente. ComponenteConcreto. )e.ine un objeto al 9ue se adicionales. ueden a6adir res onsabilidades

Decorador. Mantiene una re.erencia a un objeto Co' onente y de.ine una inter.a= 9ue se ajusta a la inter.a= del co' onente. DecoradorConcreto.!A6ade res onsabillidades al co' onente.

-)

Figura 1+: 3ecorador. Ejemplo de uso.

Consecuencias &l atrn decorador tiene7 al 'enos7 dos 1entajas y dos incon1enientes .unda'entales. #4s 5le6ibilidad 7ue la $ere cia est4tica . Pro orciona una 'anera ':s .le,ible de a6adir res onsabilidades a los objetos 9ue la 9ue od<a obtenerse a tra1;s de la herencia ('?lti le) est:tica. Con los decoradores se uede a6adir y 9uitar res onsabilidades en tie' o de ejecucin si' le'ente oni;ndolas o 9uit:ndolas. 5os )ecoradores ta'bi;n .acilitan a6adir una ro iedad dos 1eces. E8ita clases cargadas de 5u cio es e la parte de arriba de la jerar7ua . &l )ecorador o.rece un e.o9ue ara a6adir res onsabilidades 9ue consiste en a#ar slo or a9uello 9ue se necesita. &n 1e= de tratar de er'itir todas las .unciones ini'a#inables en una clase co' leja y ada table7 ode'os de.inir ri'ero una clase si' le y a6adir lue#o .uncionalidad incre'ental'ente con objetos decorador. 9 decorador y su compo e te o so id% ticos. 8n decorador se co' orta co'o un re1esti'iento trans arente. Pero desde el unto de 1ista de la identidad de un objeto7 un co' onente decorado no es id;ntico al co' onente en s<. Por tanto7 no deber<a'os a oyarnos en la identidad de objetos cuando usa'os decoradores. #uc$os objetos pe7ue:os. 8n dise6o 9ue usa el atrn )ecorator suele dar co'o resultado siste'as .or'ados or 'uchos objetos e9ue6os 'uy arecidos. 5os objetos slo se di.erencian en la .or'a en 9ue est:n interconectados y no en su clase o en el 1alor de sus 1ariables. Aun9ue dichos siste'as son .:ciles de ada tar or arte de 9uienes los co' renden bien7 ueden ser di.<ciles de a render y de urar.

Patrones relacionados Ada terA un decorador se di.erencia de un ada tado en 9ue el decorador slo ca'bia las res onsabilidades de un objeto7 no su inter.a=7 'ientras 9ue un ada tador le da a un objeto una inter.a= co' leta'ente nue1a. Co' ositeA ode'os 1er a un decorador co'o un co' uesto de#enerado 9ue slo tiene un co' onente. >o obstante7 un decorador a6ade res onsabilidades adicionales7 no est: ensado ara la a#re#acin de objetos.
-*

"trate#yA un decorador er'ite ca'biar el e,terior de un objeto@ una &strate#ia er'ite ca'biar sus tri as. "on dos .or'as alternati1as de 'odi.icar un objeto.

Facade (Estr"ct"ral de objetos)


Pro orciona una inter.a= uni.icada ara un conjunto de inter.aces de un subsiste'a. )e.ine una inter.a= de alto ni1el 9ue hace 9ue el subsiste'a sea ':s .:cil de usar.

Figura 2.: Facade. (Fac$ada).

Aplicabilidad Cuando 9uera'os ro orcionar una inter.a= si' le ara un subsiste'a co' lejo. 5os subsiste'as suelen 1ol1erse ':s co' licados a 'edida 9ue 1an e1olucionando. 5a 'ayor<a de los atrones cuando se a lican dan co'o resultado ':s clases y ':s e9ue6as. &sto hace 9ue el subsiste'a sea ':s reutili=able y .:cil de ersonali=ar7 ero ta'bi;n lo hace ':s d.<cil de usar ara a9uellos clientes 9ue no necesitan ersonali=arlo. 8na .achada uede ro orcionar7 or o'isin7 una 1ista si' le del subsiste'a 9ue resulta adecuada ara la 'ayor<a de clientes. "lo a9uellos clientes 9ue necesitan ':s ersonali=acin necesitar:n ir ':s all: de la .achada. Cuando haya 'uchas de endencias entre los clientes y las clases 9ue i' le'entan una abstraccin. "e introduce una .achada ara desaco lar el subsiste'a de sus clientes y de otros subsiste'as7 ro'o1iendo as< la inde endencia entre subsiste'as y la ortabilidad. Cuando 9uera'os di1idir en ca as nuestros subsiste'as. "e usa una .achada ara de.inir un unto de entrada en cada ni1el del subsiste'a. "i ;stos son de endientes7 se ueden si' li.icar las de endencias entre ellos haciendo 9ue se co'uni9uen entre s< ?nica'ente a tra1;s de sus .achadas.

Participantes Fac"ada. "abe 9u; clases del subsiste'a son las res onsables ante una eticin. )ele#a las eticiones de los clientes en los objetos a ro iados del subsiste'a. Clases !del !subsistema. 0' le'entan la .uncionalidad del subsiste'a. /eali=an las labores enco'endadas or el objeto .achada. >o conocen a la .achada7 es decir7 no tienen re.erencias a ella.

Consecuencias Oculta a los clientes los co' onentes del subsiste'a7 reduciendo as< el n?'ero de objetos con los 9ue tratan los clientes y haciendo 9ue el subsiste'a sea ':s .:cil de usar.
-,

Pro'ue1e un d;bil aco la'iento entre el subsiste'a y sus clientes. Muchas 1eces los co' onentes de un subsiste'a est:n .uerte'ente aco lados@ un aco la'iento d;bil nos er'ite 'odi.icar los co' onentes del subsiste'a sin 9ue sus clientes se 1ean a.ectados. 5as .achadas ayudan a eli'inar de endencias co' lejas o circulares. >o i' ide 9ue las a licaciones usen las clases del subsiste'a en caso de 9ue sea necesario. )e este 'odo se uede ele#ir entre .acilidad de uso y #eneralidad.

Patrones relacionados &l atrn Abstract Factory uede usarse ara ro orcionar una inter.a= ara crear el subsiste'a de objetos de .or'a inde endiente a otros subsiste'as. 5as .:bricas abstractas ta'bi;n ueden ser una alternati1a a las .achadas ara ocultar clases es ec<.icas de la lata.or'a. &l atrn Mediator es arecido al Facade en el sentido de 9ue abstrae .uncionalidad a artir de unas clases e,istentes. "in e'bar#o7 el ro sito del Mediator es abstraer cual9uier co'unicacin entre objetos si'ilares7 a 'enudo centrali=ando la .uncionalidad 9ue no ertenece a nin#uno de ellos. 5os cole#as de un 'ediador slo se reocu an de co'unicarse con ;l y no entre ellos directa'ente. Por el contrario7 una .achada si' le'ente abstrae una inter.a= ara los objetos del subsiste'a7 haci;ndola ':s .:cil de usar@ no de.ine nue1a .uncionalidad7 y las clases del subsiste'a no saben de su e,istencia. >or'al'ente slo se necesita un objeto Fachada. Por tanto7 estos suelen i' le'entarse co'o "in#letons.

Fly3ei+&t (Estr"ct"ral de objetos)


8sa co' arti'iento ara er'itir un #ran n?'ero de objetos de #rano .ino de .or'a e.iciente. &l atrn Fly+ei#ht describe c'o co' artir objetos ara er'itir su uso con #ranularidades 'uy .inas sin un coste rohibiti1o. 8n peso!ligero!es un objeto co' artido 9ue uede usarse a la 1e= en 1arios conte,tos. Aplicabilidad 5a e.ecti1idad del atrn Fly+ei#ht de ende enor'e'ente de c'o y dnde se use. )eber<a a licarse el atrn cuando se cu' la todo lo si#uienteA 8na a licacin utili=a un #ran n?'ero de objetos. 5os costes de al'acena'iento son ele1ados debido a la #ran cantidad de objetos. 5a 'ayor arte del estado del objeto uede hacerse e,tr<nseco. Muchos #ru os de objetos ueden ree' la=arse or relati1a'ente ocos objetos co' artidos7 una 1e= 9ue se han eli'inado el estado e,tr<nseco.

1.

5a a licacin no de ende de la identidad de un objeto. Puesto 9ue los objetos )esoligero ueden ser co' artidos7 las co' robaciones de identidad de1ol1er:n 8erdadero ara objetos conce tual'ente distintos.

Figura 21: )eso ;igero. Estructura de clases

Participantes Peso#igero. )eclara una inter.a= a tra1;s de la cual los esos li#eros ueden recibir un estado e,tr<nseco y actuar sobre ;l. Peso#igeroConcreto. 0' le'enta la inter.a= Peso5i#ero y er'ite al'acenar el estado intr<nseco7 en caso de 9ue lo haya. 8n objeto Peso5i#eroConcreto debe oder ser co' artido7 or lo 9ue cual9uier estado 9ue al'ecene debe ser intr<nseco7 esto es7 debe ser inde endiente del conte,to del objeto Peso5i#eroConcreto. Peso#igeroConcreto$oCompartido. >o todas las subclases de eso li#ero necesitan ser co' artidas. 5a inter.a= Peso5i#ero permite el co' orta'iento7 no .uer=a a ;l. 5os objetos Peso5i#eroConcreto>oCo' artido suelen tener objetos Peso5i#eroConcreto co'o hijos en al#?n ni1el de la estructura de objetos. FbricaDePesos#igeros. Crea y controla objetos esos li#eros. Baranti=a 9ue los esos li#eros se co' artan de 'anera adecuada. Cuando un cliente solicita un eso li#ero7 el objeto F:birca)ePesos5i#eros ro orciona una instancia concreta o crea uno nue1o7 en caso de 9ue no e,ista nin#uno. Cliente. Mantiene una re.erencia a los esos li#eros. Calcula o #uarda el estado e,tr<nseco de los esos li#eros.

1-

Colaboraciones &l estado 9ue un eso li#ero necesita ara .uncionar debe ser caracteri=ado co'o intr<nseco o e,tr<nseco. &l estado intr<nseco se #uarda en el objeto Peso5i#eroConcreto7 'ientras 9ue el estado e,tr<nseco lo #uardan o lo calculan los objetos Cliente. 5os clientes asan este estado al eso li#ero cuando in1ocan sus o eraciones. 5os clientes no deber<an crear instancias de Peso5i#eroConcreto directa'ente7 sino 9ue deben obtener los objetos Peso5i#eroConcreto slo a artir del objeto F:brica)ePesos5i#eros ara #aranti=ar 9ue se uedan co' artir adecuada'ente. Consecuencias 5os esos li#eros ueden introducir costes en tie' o de ejecucin asociados con la trans.erencia7 b?s9ueda y c:lculo del estado e,tr<nseco7 es ecial'ente si ;ste se al'acen en ri'er lu#ar co'o estado intr<nseco. &stos costes7 sin e'bar#o7 ueden 1erse co' ensados or el ahorro de es acio de al'acena'iento. &ste ahorro est:n en .uncin deA 5a reduccin en el n?'ero total de instancias lo#rada 'ediante el co' arti'iento. 5a cantidad de estado intr<nseco or objeto. "i el estado intr<nseco se calcula o se al'acena.

Cuantos ':s objetos eso li#ero se co' arta7 'ayor ser: el ahorro de al'acena'iento. Patrones relacionados Fly+ei#ht suele co'binarse con el atrn Co' osite ara re resentar una estructura jer:r9uica co'o un #ra.o con nodos hojas co' artidos. 8na consecuencia del co' arti'iento es 9ue los nodos hojas esos li#eros no ueden tener un untero a su adre. &n 1e= de eso7 el untero al adre se le asa al eso li#ero co'o arte de su estado e,tr<nseco. &sto tiene un i' acto decisi1o en la .or'a en 9ue se co'unican los objetos de la jerar9u<a.

Pro4y (Estr"ct"ral de objetos)


Pro orciona un re resentante o sustituto de otro objeto ara controlar el acceso a ;ste.

Figura 22: )ro6y. Estructura de clases.

Aplicabilidad &ste atrn es a licable cada 1e= 9ue hay necesidad de una re.erencia a un objeto ':s 1ers:til o so.isticada 9ue un si' le untero. Al#unas situaciones co'unes en la 9ue es a licable el atrn Pro,y sonA

11

Pro,y re'oto7 9ue ro orciona un re resentante local de un objeto situado en otro es acio de direcciones. Pro,y 1irtual7 9ue crea objetos costosos or encar#o. Pro,y de roteccin7 9ue controla el acceso al objeto ori#inal. Co'o re.erencia inteli#ente7 sustituyendo a un si' le adicionales cuando se accede a un objeto. untero 9ue reali=a o eraciones

Al#unos eje' los de usos t< icos sonA Contar el n?'ero de re.erencias al objeto real7 de 'anera 9ue este ueda liberarse auto':tica'ente cuando no haya nin#una re.erencia a unt:ndole ( untero inteli#ente). Car#ar un objeto ersistente en la 'e'oria cuando es re.erenciado or ri'era 1e=. Co' robar 9ue se blo9uea el objeto real antes de acceder a ;l ara #aranti=ar 9ue no ueda ser 'odi.icado or nin#?n otro objeto.

Participantes Pro%&. Mantiene una re.erencia 9ue er'ite al ro,y acceder al objeto real. &l ro,y uede re.erirse a un "ujeto en caso de 9ue las inter.aces de "ujeto/eal y "ujeto sean la 'is'a. Pro orciona una inter.a= id;ntica a la de "ujeto7 de 'anera 9ue un ro,y ueda ser sustitu<do or el sujeto real. Controla el acceso al sujeto real y uede ser el res onsable de su creacin y borrado. )e endiendo del ti o de ro,yA Pro,ys re'otos7 res onsables de codi.icar luna eticin y sus ar#u'entos ara en1iar la eticin codi.icada al sujeto real 9ue se encuentra en un es acio de direcciones di.erente. 5os ro,ys 1irtuales ueden #uardar in.or'acin adicional sobre el sujeto real7 or lo 9ue ueden retardar el acceso al 'is'o. 5os ro,ys de roteccin co' rueban 9ue el lla'ador ten#a los necesarios ara reali=ar una eticin. er'isos de acceso

Sujeto. )e.ine la inter.a= co'?n ara el "ujeto/eal y el Pro,y7 de 'odo 9ue ueda usarse un Pro,y en cual9uier sitio en el 9ue se es ere un "ujeto/eal. SujetoReal. )e.ine el objeto real re resentado.

Colaboraciones &l Pro,y rediri#e eticiones al "ujeto/eal cuando sea necesario7 de endiendo del ti o de Pro,y. Consecuencias &l atrn Pro,y introduce un ni1el de indireccin ara acceder a un objeto. &sta indireccin adicional tiene 'uchos osibles usos7 de endiendo del ti o de ro,yA 8n ro,y re'oto uede ocultar el hecho de 9ue un objeto reside en un es acio de direcciones di.erente. 8n ro,y 1irtual uede lle1ar a cabo o ti'i=aciones tales co'o crear un objeto or encar#o. 3anto los ro,ys de roteccin co'o las re.erencias inteli#entes er'iten reali=ar tareas de 'anteni'iento adicionales cuando se accede a un objeto.

Cay otra o ti'i=acin 9ue el objeto ro,y uede ocultar al cliente. "e deno'ina copia'de'escritura y
1

est: relacionada con la creacin or encar#o. Co iar un objeto #rande y co' lejo uede ser una o eracin costosa. "i dicha co ia no se 'odi.ica nunca7 no hay necesidad de incurrir en ese #asto. Al utili=ar un ro,y ara os oner el roceso de co ia nos esta'os ase#urando de 9ue slo a#a'os el recio de co iar el objeto en caso de 9ue ;ste sea 'odi.icado. Para reali=ar una co iaHdeHescritura el sujeto debe tener un contador de re.erencias. Co iar el ro,y no ser: ':s 9ue incre'entar dicho contador. "olo cuando el cliente solicita una o eracin 9ue 'odi.ica el sujeto es cuando el ro,y real'ente lo co ia. Cuando ;ste lle#a a cero7 borra el sujeto. 5a co iaHdeHescritura uede reducir si#ni.icati1a'ente el coste de co iar sujetos esados. Patrones relacionados Ada ter ro orciona una inter.a= di.erente ara el objeto 9ue ada ta. Por el contrario7 un ro,y tiene la 'is'a inter.a= 9ue su sujeto. >o obstante7 un ro,y utili=ado ara roteccin de acceso odr<a recha=ar una o eracin 9ue el sujeto s< reali=a7 de 'odo 9ue su inter.a= uede ser real'ente un subconjunto de la del sujeto. )ecorator@ si bien ueden tener una i' le'entacin arecida a los ro,ies7 tienen un ro sito di.erente. 8n decorador a6ade a6ade una o ':s res onsabilidades a un objeto7 'ientras 9ue un ro,y controla el acceso a un objeto. 5os ro,ies di.ieren en el #rado de si'ilitud entre su i' le'entacin y la de un decorador. 8n ro,y de roteccin odr<a i' le'entarse e,acta'ente co'o un decorador. Por otro lado7 un ro,y re'oto no contendr: una re.erencia directa a su sujeto real7 sino una re.erencia indirecta7 co'o un E0) de ':9uina y la direccin local en dicha ':9uinaF. 8n ro,y 1irtual e' e=ar: teniendo una re.erencia indirecta7 co'o un no'bre de .ichero7 ero odr: al .inal obtener y utili=ar un re.erencia directa.

Disc"si5n sobre los (atrones estr"ct"rales


&l atrn Ada ter se centra en resol1er inco' atibilidades entre dos inter.aces e,istentes. &s un 'odo de lo#rar 9ue dos clases dise6adas inde endi;nte'ente trabajen juntas sin tener 9ue 1ol1er a i' le'entar una u otra. &l atrn Brid#e une una i' le'entacin con sus i' le'entaciones7 9ue ueden ser nu'erosas. Pro orciona una inter.a= estable a los clientes er'itiendo 9ue ca'bien las clases 9ue la i' le'entan. 3a'bi;n er'ite incor orar nue1as i' le'entaciones a 'edida 9ue e1oluciona el siste'a 8n ada tador suele hacerse necesario cuando se descubre 9ue deber<an trabajar juntas dos clases inco' atibles7 #eneral'ente ara e1itar du licar cdi#o. &l usuario de un Brid#e sabe de ante'ano 9ue una abstraccin debe tener 1arias i' le'entaciones y 9ue una y otras ueden 1ariar inde endiente'ente. &l atrn Ada ter hace 9ue las cosas .uncionen despu%s de 9ue han sido dise6adas@ el Brid#e lo hace a tes. &l atrn )ecorator est: dise6ado ara er'itir a6adir res onsabilidades a objetos sin crear subclases. &l atrn Co' osite estructura subclases ara 9ue se uedan tratar de 'anera uni.or'e 'uchos objetos relacionados y 9ue '?lti les objetos uedan ser tratados co'o uno solo. &s decir7 no se centra en la decoracn7 sino en la re resentacin. )esde el unto de 1ista del atrn )ecorator7 un Co' uesto es un Co' onenteConcreto. )esde el unto de 1ista del atrn Co' osite7 un )ecorador es una Coja. &n el atrn Pro,y el sujeto de.ine la rinci al .uncionalidad y el ro,y ro orciona7 o recha=a7 el acceso al 'is'o. &n el )ecorator el co' onente ro orciona solo arte de .uncionalidad7 y uno o ':s decoradores hacen el resto.

1#

PATRONES DE CO%PORTA%IENTO
5os atrones de co' orta'iento tienen 9ue 1er con al#orit'os y con la asi#nacin de res onsabilidades a objetos. 5os atrones de co' orta'iento describen no solo atrones de clases y objetos7 sino ta'bi;n atrones de co'unicacin entre ellos. &stos atrones describen el .lujo de control co' lejo 9ue es di.<cil se#uir en tie' o de ejecucin7 lo 9ue nos er'ite ol1idarnos del .lujo de control ara concentrarnos en el 'odo en 9ue se interconectan los objetos. 5os atrones de co' orta'iento basados en clases usan la herencia ara distribuir el co' orta'iento entre clases. 5os atrones de co' orta'iento basados en objetos usan la co' osicin de objetos en 1e= de la herencia. Al#unos describen c'o coo eran un #ru o de objetos arejos ara reali=ar una tarea 9ue nin#?n objeto indi1idual uede lle1ar a cabo or s< solo. 8na cuestin i' ortante es c'o los objetos saben unos de otros. Cada uno odr<a 'antener re.erencias e, l<citas al resto7 ero eso incre'entar<a su aco la'iento. 5le1ado al l<'ite7 cada objeto conocer<a a todos los de':s.

C&ain O6 Res(osability (Co2(orta2iento de Objetos)


&1ita aco lar el e'isor de una eticin a su rece tor7 dando a ':s de un objeto la osibilidad de res onder a la eticin. &ncadena los objetos rece tores y asa la eticin a tra1;s de la cadena hasta 9ue es rocesada or al#?n objeto.

Figura 2!: C$ai 25 <esposability: estructura

Aplicabilidad Cuando hay ':s de un objeto 9ue uede 'anejar una eticin y el 'anejardor no se conoce a riori7 sino 9ue deber<a deter'inarse auto':tica'ente. Cuando se 9uiere en1iar una eticin a un objeto entre 1arios sin es eci.icar e, l<cita'ente el rece tor. Cuando el conjunto de objetos 9ue din:'ica'ente. ueden tratar una eticin deber<a ser es eci.icado

Participantes (anejador. )e.ine una inter.a= enlace al sucesor. (anejadorConcreto. 3rata las ara tratar las eticiones. O cional'ente7 i' le'enta el

eticiones de las 9ue es res onsable. Puede acceder a su

1$

sucesor. "i el ManejadorConcreto uede 'anejar la eticin7 lo hace@ en caso contrario la reen1<a a su sucesor. Cliente. 0niciali=a la eticin a un objeto ManejadorConcreto de la cadena.

Colaboraciones Cuando un cliente en1<a una eticin7 ;sta se ro a#a a tra1;s de la cadena hasta 9ue un objeto ManejadorConcreto se hace res onsable de rocesarla.

Figura 24: C$ai 25 <espo sability: ejemplo de uso

Consecuencias <educe el acoplamie to. &l atrn libera a un objeto de tener 9ue saber 9u; otro objeto 'aneja una eticin. 8n objeto slo tiene 9ue saber 9ue la eticin ser: 'anejada de 5orma apropiada. >i el rece tor ni el e'isor se conocen e, l<cita'ente entre ellos. 5a Cadena de /es onsabilidad uede si' li.icar las intercone,iones entre objetos. A:ade 5le6ibilidad para asig ar respo sabilidades a otros objetos . 5a Cadena de /es onsabilidad o.rece una .le,ibilidad a6adida ara re artir res onsabilidades entre objetos. "e ueden a6adir o ca'biar res onsabilidades ara tratar una eticin 'odi.icando la cadena en tie' o de ejecucin. =o se gara ti0a la recepci& . )ado 9ue las eticiones no tienen un rece tor e, l<cito7 no hay #arant<a de 9ue sean 'anejadas@ la eticin uede alcan=ar el .inal de la cadena sin 9ue haya sido rocesada.

Patrones relacionados &ste atrn se suele a licar conjunta'ente con el co' onentes ueden actuar co'o sucesores. atrn Co' osite. &n ;l7 los adres de los

Co22and (Co2(orta2iento de objetos)


&nca sula una eticin en un objeto7 er'itiendo as< ara'etri=ar a los clientes con di.erentes eticiones7 hacer cola o lle1ar un re#istro de las eticiones7 y oder deshacer las o eraciones.

1'

Figura 2": Comma d: estructura

Aplicabilidad Cuando se 9uiera ara'etri=ar objetos con una accin a reali=ar. &n un len#uaje rocedi'ental se odr<a e, resar esa ara'etri=acin con una .uncin callbacI. 5os objetos Orden sustituyen a la .uncin callbacI Para es eci.icar7 oner en cola y ejecutar eticiones en di.erentes instantes de tie' o. 8n objeto Orden uede tener un tie' o de 1ida inde endiente de la eticin ori#inal. Para er'itir deshacer. 5a o eracin EjecutarOrden uede #uardar en la ro ia orden el estado 9ue anule sus e.ectos. Per'itir re#istrar los ca'bios de 'anera 9ue se uedan 1ol1er a a licar en caso de una ca<da del siste'a. &structurar un siste'a alrededor de o eraciones de alto ni1el construidas sobre o eraciones b:sicas.

Participantes Orden. )eclara una inter.a= ara ejecutar una o eracin. OrdenConcreta. )e.ine un enlace entre un objeto rece tor y una accin. 0' le'enta &jecutar in1ocando la corres ondiente o eracin u o eraciones del /ece tor. Cliente. Crea un objeto OrdenConcreta y establece su rece tor. Invocador. 5e ide a la orden 9ue ejecute la eticin. Receptor. "abe c'o lle1ar a cabo las o eraciones asociadas a una eticin. Cual9uier clase uede actuar co'o /ece tor.

Colaboraciones &l cliente crea un objeto OrdenConcreta y es eci.ica su rece tor. 8n objeto 0n1ocador al'acena el objeto OrdenConcreta. &l 0n1ocador en1<a una eticin lla'ando a ejecutar sobre la orden. Cuando las rdenes se ueden deshacer7 OrdenConcreta #uarda el estado ara deshacer la orden antes de lla'ar a ejecutar. &l objeto OrdenConcreta in1oca o eraciones de su rece tor ara lle1ar a cabo la eticin.

1)

Consecuencias Orden desaco la el objeto 9ue in1oca la o eracin de a9uel 9ue sabe c'o reali=arla. 5as rdenes son objetos de cual9uier objeto. ri'era clase. Pueden ser 'ani ulados y e,tendidos co'o

"e ueden ensa'blar rdenes en una orden co' uesta. &n #eneral7 una orden co' uesta es una instancia de un atrn Co' osite. &s .:cil a6adir nue1as rdenes7 ya 9ue no hay 9ue ca'biar las clases e,istentes.

Patrones relacionados "e uede usar el atrn Co' osite ara i' le'entar OrdenMacro 8n Me'ento uede 'antener el estado 9ue necesitan las rdenes ara anular sus e.ectos. 8na orden 9ue debe ser co iada antes de ser #uardada en el historial .unciona co'o un Prototi o

Inter(reter (Co2(orta2iento de clases)


)ado un len#uaje7 de.ine una re resentacin de su #ra':tica junto con un int;r rete 9ue usa dicha re resentacin ara inter retar sentencias del len#uaje. Aplicabilidad "e utili=a 0ntre reter cuando hay un len#uaje 9ue inter retar y se ueden re resentar las sentencias del len#uaje co'o :rboles sint:cticos abstractos. &l atrn 0nter reter .unciona 'ejor cuando la #ra':tica es si' le. 5a e.iciencia no es una reocu acin cr<tica7 ya 9ue los int;r retes ':s e.icientes no se i' le'entan inter retando directa'ente :rboles de an:lisis sint:cticos directa'ente. Participantes )%presinAbstracta. )eclara una o eracin 0nter retar 9ue es co'?n a todos los nodos del :rbol de sinta,is abstracto. )%presin*erminal. 0' le'enta una o eracin 0nter retar asociada con los s<'bolos ter'inales de la #ra':tica. "e necesita una instancia de esta clase ara cada s<'bolo ter'inal de una sentencia. )%presion$o*erminal. Por cada e, resin de la #ra':tica / AAJ / $ /* K /n debe haber una de estas clases. Mantiene 1ariables de instancia de ti o &, resionAbstracta ara cada uno de los s<'bolos de /$ a /n. 0' le'enta una o eracin 0nter retar ara cada uno de los s<'bolos no ter'inales de la #ra':tica. 0nter retar nor'al'ente se lla'a a s< 'is'a recursi1a'ente sobre las 1ariables 9ue re resentan de /$ a /n Conte%to. Contiene in.or'acin 9ue es #lobal al int;r rete.

1*

Cliente. Construye o recibe un :rbol sint:ctico abstracto 9ue re resenta una deter'inada sentencia del len#uaje de.inido or la #ra':tica. &ste :rbol sint:ctico abstracto est: .or'ado or instancias de clases &, resion>o3er'inal y &, resion3er'inal. 0n1oca a la o eracin 0nter retar.

Figura 2': > terpreter: estructura

Colaboraciones &l cliente construye o recibe la sentencia co'o un :rbol sint:ctico abstracto .or'ado or instancias de &, resion>o3er'inal y &, resion3er'inal. A continuacin el cliente iniciali=a el conte,to e in1oca a la o eracin 0nter retar. Cada nodo &, resion>o3er'inal de.ine 0nter retar en t;r'inos del 0nter retar de cada sube, resin. 5a o eracin 0nter retar de cada &, resion3er'inal de.ine el caso base de la recursion. 5as o eraciones 0nter retar de cada nodo usan el conte,to ara al'acenar y acceder al estado del int;r rete.

Consecuencias Es 54cil cambiar y ampliar la gram4tica . Puesto 9ue el atrn usa clases ara re resentar las re#las de la #ra':tica7 se uede usar la herencia ara ca'biar o e,tender ;sta. <esulta 54cil impleme tar la gram4tica. 5as clases 9ue de.inen los nodos del :rbol sint:ctico abstracto tienen i' le'entaciones si'ilares. ;as gram4ticas complejas so di5ciles de ma te er. &l atrn 0nter reter de.ine al 'enos una clase ara cada re#la de la #ra':tica. A:adir ue8os modos de i terpretar e6presio es . &l atrn 0nter reter .acilita e1aluar una e, resin de una 'anera distinta. Podr<a er'itirse i' ri'ir con .or'ato una e, resin o reali=ar una co' robacin de ti os de.iniendo una nue1a o eracin en las clases de las e, resiones.

Patrones relacionados Co' ositeA el :rbol sint:ctico abstracto es una instancia del atrn Co' osite.
1,

&l atrn Fly+ei#ht 'uestra co'o co' artir s<'bolos ter'inales dentro del :rbol sint:ctico abstracto. 0teratorA el int;r rete uede usar un iterador ara recorrer la estructura.

Iterator (Co2(orta2iento de objetos)


Pro orciona un 'odo de acceder secuencial'ente a los ele'entos de un objeto a#re#ado sin e, oner su re resentacin interna.

Figura 2(: >terator: estructura

Aplicabilidad Para acceder al contenido de un objeto a#re#ado sin e, oner su re resentacin interna Para er'itir 1arios recorridos sobre objetos a#re#ados. Para ro orcionar una inter.a= uni.or'e ara recorrer di.erentes estructuras a#re#adas7 es decir7 ara er'itir la iteracin oli'r.ica.

Participantes Iterador. )e.ine una inter.a= ara recorrer los ele'entos y acceder a ellos. IteradorConcreto. 0' le'enta la inter.a= 0terador. Mantiene la osicin actual en el recorrido del a#re#ado. Agregado. )e.ine una inter.a= ara crear un objeto 0terator. AgregadoConcreto. 0' le'enta la inter.a= de creacin de 0terator ara de1ol1er una instancia del 0teradorConcreto a ro iado.

Colaboraciones 8n 0teradorConcreto sabe cu:l es el objeto actual del a#re#ado y uede calcular el si#uiente objeto en el recorrido.

Consecuencias )ermite 8ariacio es e el recorrido de u agregado. 5os iteradores .acilitan ca'biar el al#orit'o de recorridoA basta sustituir la instancia del iterador or otra di.erente. 3a'bi;n ueden de.inirse subclases de 0terador ara er'itir nue1os recorridos. ;os iteradores simpli5ica la i ter5a0 Agregado. 5a inter.a= de recorrido de 0terador eli'ina la necesidad de una inter.a= arecida en A#re#ado7 si' li.icando as< la inter.a= del a#re#ado. ,e puede $acer m4s de u recorrido a la 8e0 sobre u agregado . 8n iterador 'antiene su ro io estado del recorrido7 or tanto es osible ir reali=ando ':s de un recorrido al 'is'o tie' o.

Patrones relacionados Co' ositeA los iteradores suelen a licarse a estructuras recursi1as co'o los co' uestos. Factory MethodA los iteradores oli'r.icos se basan en ';todos de .abricacin ara crear instancias de las subclases a ro iadas del 0terator. Me'ento suele usarse conjunta'ente con el atrn 0terator. 8n iterador uede usar un 'e'ento ara re resentar el estado de una iteracin. &l iterador al'acena el 'e'ento interna'ente.

%ediator (Co2(orta2iento de objetos)


)e.ine un objeto 9ue enca sula c'o interact?an una serie de objetos. Pro'ue1e un bajo aco la'iento al e1itar 9ue los objetos se re.ieran unos a otros e, l<cita'ente y er'ite 1ariar la interaccin entre ellos de .or'a inde endiente.

Figura 2*: #ediator: estructura de clases

Aplicabilidad Cuando un conjunto de objetos se co'unican de .or'a bien de.inida7 ero co' leja. 5as interde endencias resultantes no est:n estructuradas y son di.<ciles de co' render. Cuando es di.<cil reutili=ar un objeto7 ya 9ue ;ste se re.iere a otros 'uchos objetos con los 9ue se co'unica. Cuando un co' orta'iento 9ue est: distribu<do entre 1arias clases deber<a oder ser ada tado sin necesidad de una #ran cantidad de subclases.

Participantes (ediador. )e.ine una inter.a= ara co'unicarse con sus objetos Cole#a (ediadodConcreto. 0' le'enta el co' orta'iento coo erati1o coordinando objetos Cole#a.
-

Clases!Colega. Cada clase Cole#a conoce a su objeto Mediador. Cada Cole#a se co'unica con su 'ediador cada 1e= 9ue7 de no e,istir ;ste7 se hubiera co'unicado con otro cole#a.

Colaboraciones 5os Cole#as en1<an y reciben eticiones a tra1;s de un Mediador. &5 'ediador i' le'enta el co' orta'iento coo erati1o enca'inando estas eticiones a los Cole#as a ro iados. Consecuencias <educe la $ere cia. 8n 'ediador locali=a el co' orta'iento 9ue de otra 'anera estar<a distribu<do en 1arios objetos. 3esacopla a los Colegas. 8n 'ediador ro'ue1e bajo aco la'iento entre Cole#as. 5as clases Cole#a ueden usarse y 'odi.icarse de 'anera inde endiente. ,impli5ica los protocolos de los objetos. 8n 'ediador sustituye interacciones 'uchosHaH'uchos entre el 'ediador y sus Cole#as. 5as relaciones unoHaH'uchos son ':s .:ciles de co' render7 'antener y e,tender. Abstrae c&mo coopera los objetos. Cacer de la 'ediacin un conce to inde endiente y enca sularla en un objeto er'ite centrarse en c'o interact?an los objetos de un siste'a. Ce trali0a el co trol. &l atrn Mediator ca'bia co' lejidad de interaccin or co' lejidad en el 'ediador. )ado 9ue un 'ediador enca sula rotocolos7 uede hacerse ':s co' lejo 9ue cual9uier Cole#a indi1idual.

Patrones relacionados &l atrn Facade di.iere del Mediator en 9ue abstrae un subsiste'a de objetos ara ro orcionar un inter.a= ':s con1eniente. "u rotocolo es unidireccinal@ es decir7 los objetos Facade hacen eticiones a las clases del subsiste'a ero no a la in1ersa. Por el contrario7 el atrn Mediator er'ite un
1

co' orta'iento coo erati1o 9ue no es 'ultidireccional.

ro orcionado

or los objetos Cole#a y el

rotocolo es

5os Cole#as ueden co'unicarse con el 'ediador utili=ando el atrn Obser1er.

%e2ento (Co2(orta2iento de objetos)


/e resenta y e,ternali=a el estado interno de un objeto sin 1iolar la enca sulacin7 de .or'a 9ue este uede 1ol1er a dicho estado ':s tarde.

Figura !.: #eme to: estructura

Aplicabilidad Cuando hay 9ue #uardar una instancia del estado de un objeto (o arte de este) ara 9ue ueda 1ol1er osterior'ente a ese estado. Cuando una inter.a= directa ara obtener el estado e, on#a detalles de i' le'entacin y ro' a la enca sulacin del objeto.

Participantes (emento. Buarda el estado interno del objeto creador. &l 'e'ento uede #uardar tanta in.or'acin del estado interno del creador co'o sea necesario7 a discrecin del creador. Prote#e .rente a accesos de otros objetos 9ue no sean el creador. 5os 'e'entos tienen real'ente dos inter.acesA el Conserje 1e una inter.a= reducida (solo uede asar el Me'ento a otros objetos)7 el Creador 1e una inter.a= a' lia 9ue le er'ite accedera a todos los datos necesarios ara 1ol1er a su estado anterior. Creador. Crea un 'e'ento 9ue contiene una instantanea de su estado interno actual. 8sa el Me'ento ara 1ol1er a su estado anterior. Conserje. &s res onsable de #uardar en lu#ar se#uro el 'e'ento. >unca e,a'ina los contenidos del 'e'ento ni o era sobre ellos.

Colaboraciones 8n conserje solicita un 'e'e'to a un creador7 lo al'acena durante un tie' o y se lo de1uel1e a su creador. A 1eces el conserje no de1ol1er: el 'e'ento a su creador7 ya 9ue odr<a no necesitar 1ol1er a un estado anterior. 5os 'e'entos son asi1os. "lo el creador 9ue cre el 'e'ento asi#nar: o recu erar: su estado.

Consecuencias )reser8aci& de los lmites de la e capsulaci& . &l 'e'ento e1ita e, oner in.or'acin 9ue solo deber<a ser #estionada or un creador. ,impli5ica al Creador. &n otros dise6os 9ue ersi#uen conser1ar la enca sulacin7 el Creador 'antienen las 1ersiones de su estado interno 9ue han sido solicitadas or los clientes. &so asi#na toda la res onsabilidad de #estin de al'acena'iento al Creador. El uso de meme tos puede ser costoso . 5os 'e'entos odr<an roducir un coste considerable si el Creador debe co iar #randes cantidades de in.or'acin ara #uardarla en el Me'ento o si los clientes crean y de1uel1en 'e'entos a su creador con de'asiada .recuencia. 3e5i ici& de i ter5aces reducidas y amplias . &n al#unos len#uajes uede ser di.<cil #aranti=ar 9ue slo el creador acceda al estado del 'e'ento. Costes ocultos e el ciudado de los meme tos. 8n conserje es res onsable de borrar los 'e'entos 9ue custodia. "in e'bar#o7 el conserje no sabe cu:nto estado hay en un 'e'ento. )e ah< 9ue un conserje 9ue deber<a ser li#ero uede ro1ocar #randes costes de al'acena'iento cuando debe #uardar un 'e'ento.

Patrones relacionados Co''andA las rdenes ueden usar 'e'entos ara #uardar el estado de las o eraciones 9ue ueden deshacerse. 0teratorA uede usar 'e'entos ara la iteracin.

Obser7er (Co2(orta2iento de objetos)


)e.ine una de endencia de unoHaH'uchos entre objetos7 de .or'a 9ue cuando un objeto ca'bie de estado se noti.i9ue y se actualicen auto':tica'ente todos los objetos 9ue de enden de ;l. Aplicabilidad Cuando una abstraccin tiene dos as ectos y uno de ende del otro. &nca sular estos as ectos en objetos se arados er'ite 'odi.icarlos y reutili=arlos de .or'a inde endiente. Cuando un ca'bio en un objeto re9uiere ca'biar otros y no sabe'os cu:ntos objetos necesitan ca'biarse. Cuando un objeto deber<a ser ca a= de noti.icar a otros sin hacer su osiciones sobre 9uienes son dichos objetos. &n otras alabras7 cuando no 9uera'os 9ue estos objetos est;n .uerte'ente aco lados.

Participantes Sujeto. Conoce a sus obser1adores. 8n sujeto uede ser obser1ado or cual9uier n?'ero de objetos Obser1ador. Pro orciona una inter.a= ara asi#nar y 9uitar objetos Obser1ador. Observador. )e.ine una inter.a= ara actuali=ar los objetos 9ue deben ser noti.icados ante ca'bios en un sujeto. SujetoConcreto. Al'acena el estado de inter;s ara los objetos Obser1adorConcreto. &n1<a una noti.icacin a sus obser1adores cuando ca'bia su estado.

ObservadorConcreto. Mantiene una re.erencia a un objeto "ujetoConcreto. Buarda un estado 9ue deber<a ser consistente con el del sujeto. 0' le'enta la inter.a= de actuali=acin del Obser1ador ara 'antener su estado consistente con el del sujeto.

Figura !1: 2bser8er: estructura

Colaboraciones "ujetoConcreto noti.ica a sus obser1adores cada 1e= 9ue se roduce un ca'bio 9ue udiera hacer 9ue el estado de ;stos .uera inconsistente con el suyo. )es u;s de ser in.or'ado de un ca'bio en el sujeto concreto7 un objeto Obser1adorConcreto uede edirle al sujeto ':s in.or'acin. Obser1adorConcreto usa esta in.or'acin ara sincroni=ar su estado con el del sujeto.

Consecuencias &l atrn Obser1ador er'ite 'odi.icar los sujetos y obser1adores de .or'a inde endiente. &s osible reutilli=ar objetos sin reutili=ar sus obser1adores y 1ice1ersa. &sto er'ite a6adir obser1adores sin 'odi.icar el sujeto u otros obser1adores. Acoplamie to abstracto e tre ,ujeto y 2bser8ador. &l sujeto no conoce la clase concreta de nin#?n obser1ador7 or lo 9ue el aco la'iento entre sujetos y obser1adores es '<ni'o. Bracias a ello7 ueden ertenecer a di.erentes ca as de abstraccin del siste'a. Capacidad de comu icaci& media te di5usi& . 5a noti.icacin en1iada or un sujeto no necesita es eci.icar su rece tor. 5a noti.icacin se en1<a a todos los objetos interesados en ella. Actuali0acio es i esperadas. 8na o eracin a arente'ente ino.ensi1a sobre el sujeto uede dar lu#ar a una serie de actuali=aciones en cascada de los obser1adores y sus objetos de endientes.

Patrones relacionados MediatorA enca sulando se':nticas de actuali=aciones co' lejas7 el Bestor)eCa'bios act?a co'o 'ediador entre sujetos y obser1adores. "in#letonA el Bestor)eCa'bios uede usar el atrn "in#leton ara 9ue sea ?nico y #lobal'ente accesible.

State (Co2(orta2iento de objetos)


Per'ite 9ue un objeto 'odi.i9ue su co' orta'iento cada 1e= 9ue ca'bie su estado interno. Parecer: 9ue ca'bia la clase del objeto

Aplicabilidad Cuando el co' orta'ietno de un objeto de ende de su estado y debe ca'biar en tie' o de ejecucin de endiendo de ese estado. Cuando las o eraciones tienen lar#as sentencias condicionales con '?lti les ra'as 9ue de enden del estado del objeto.

Participantes Conte%to. )e.ine la inter.a= de inter;s ara los clientes. Mantiene una instancia de una subclase de &stadoConcreto 9ue de.ine el estado actual. )stado. )e.ine una inter.a= ara enca sular el co' orta'iento asociado con un deter'inado estado de Conte,to. Subclase!de!)stadoConcreto. Cada subclase i' le'enta un co' orta'iento asociado con un estado del Conte,to.

Colaboraciones Conte,to dele#a las eticiones 9ue de enden del estado en el objeto &stadoConcreto actual. 8n conte,to uede asarse a s< 'is'o co'o ar:'etro ara 9ue el objeto &stado 'aneje la eticin. &sto er'ite al objeto &stado acceder al conte,to si .uera necesario. Conte,to es la inter.a= rinci al de los clientes. 5os clientes ueden con.i#urar un conte,to con objetos &stado. 8na 1e= 9ue est: con.i#urado el conte,to7 sus clientes ya no tienen 9ue trabajar con los objetos &stado directa'ente. Cual9uiera de las subclases de Conte,to o de &stadoConcreto ueden decidir 9u; estado si#ue a otro y bajo 9u; circunstancias.

'

Consecuencias ;ocali0a el comportamei to depe die te del estado y di8ide dic$o comportamie to e di5ere tes estados. Co'o todo el cdi#o de endiente del estado reside en una subclase de &stado7 ueden a6adirse .:cil'ente nue1os estados y transiciones de.iniendo nue1as subclases. ?ace e6plcitas las tra sicio es e tre estados. Cuando un objeto estado de.ine su estado actual ?nica'ente en t;r'inos de 1alores de datos internos7 sus transiciones entre estados carecen de una re resentacin e, l<cita@ slo a arecen co'o asi#naciones a deter'inadas 1ariables. 0ntroducir objetos se arados ara los di.erentes estados hace 9ue las transiciones sean ':s e, l<citas. ;os objetos Estado puede compartirse. &n caso de 9ue los objetos &stado no ten#an 1ariables7 es decir7 9ue el estado 9ue re resenten lo sea entera'ente or su ti o7 1arios conte,tos ueden co' artir un 'is'o objeto &stado.

Patrones relacionados &l atrn Fly+ei#ht e, lica c'o y cu:ndo co' artir objetos &stado. 5os objetos &stado a 'enudo son "in#letons.

Strate+y (Co2(orta2iento de objetos)


)e.ine una .a'ilia de al#orit'os7 enca sula cada uno de ellos y los hace interca'biables. Per'ite 9ue un al#orit'o 1ar<e inde endiente'ente de los clientes 9ue lo usan. Aplicabilidad Cuando 'uchas clases relacionadas di.ieren slo en su co' orta'iento. 5as estra#e#ias er'iten con.i#urar una clase con un deter'inado co' orta'iento entre 'uchas osibles. "e necesitan distintas 1ariantes de un al#orit'o. Cuando un al#orit'o usa datos 9ue los clientes no deber<an conocer.

Cuando una clase de.ine 'uchos co' orta'ientos y estos se re resentan co'o '?lti les sentencias condicionales en sus o eraciones.

Figura !4: ,trategy: estructura.

Participantes )strategia. )eclara una inter.a= co'?n a todos los al#orit'os er'itidos. &l Conte,to usa esta inter.a= ara lla'ar al al#orit'o de.inido or una &strate#iaConcreta. )strategiaConcreta. 0' le'enta el al#orit'o usando la inter.a= &strate#ia. Conte%to. "e con.i#ura con un objeto &strate#iaConcreta. Mantiene una re.erencia a un objeto &strate#ia. Puede de.inir una inter.a= 9ue er'ita a la &strate#ia acceder a sus datos.

Colaboraciones &strate#ia y conte,to interact?an ara i' le'entar el al#orit'o ele#ido. 8n conte,to uede asar a la estrate#ia todos los datos re9ueridos or el al#orit'o cada 1e= 9ue se lla'a a ;ste. Otra alternati1a es 9ue el conte,to se ase a s< 'is'o co'o ar#u'ento de las o eraciones de &strate#ia. &sto er'ite a la estrate#ia hacer lla'adas a su conte,to cuando sea necesario. 8n conte,to rediri#e eticiones de los clientes a su estrate#ia. 5os clientes nor'al'ente crean un objeto &strate#iaConcreta7 el cual asan al conte,to@ or tanto7 los clientes interact?an e,clusi1a'ente con el conte,to. "uele haber una .a'ilia de clases &strate#iaConcreta a ele#ir or el cliente.

Consecuencias Familias de algoritmos relacio ados. 5as jerar9u<as de clases &strate#ia de.inen una .a'ilia de al#orit'os o co' orta'ientos ara ser reutili=ados or los conte,tos.
*

9 a alter ati8a a la $ere cia . &nca sular el al#orit'o en clases &strate#ia se aradas nos er'ite 1ariar el al#orit'o inde endiente'ente de su conte,to7 haci;ndolo ':s .:cil de ca'biar7 co' render y e,tender. ;as estrategias elimi a las se te cias co dicio ales. Cuando se juntan 'uchos co' orta'ientos en una clase es di.<cil no usar sentencias condicionales ara seleccionar el co' orta'iento correcto. &nca sular el co' orta'iento en clases &strate#ia se aradas eli'ina estas sentencias condicionales. 9 a elecci& de impleme tacio es. 5as estrate#ias i' le'entaciones del 'is'o co' orta'iento. ueden ro orcionar distintas

;os clie tes debe co ocer las di5ere tes Estrategias. &l atrn tiene el otencial incon1eniente de 9ue un cliente debe co' render c'o di.ieren las &strate#ias antes de seleccionar la adecuada. Costes de comu icaci& e tre Estrategia y Co te6to. 5a inter.a= de &strate#ia es co' artida or todas las clases &strate#iaConcreta7 ya sea el al#orit'o 9ue i' le'enta tri1ial o co' lejo. Por tanto7 es robable 9ue al#unos objetos &strate#iaConcreta no usen toda la in.or'acin 9ue reciben a tra1;s de dicha inter.a=. 5as estrate#ias concretas ueden incluso no utili=ar nunca esa in.or'acin7 or lo 9ue habr: 1eces 9ue el conte,to crea e iniciali=a ar:'etros 9ue nunca se usan. #ayor 1mero de objetos. 5as estrate#ias au'entan el n?'ero de objetos de una a licacin. Puede reducirse i' le'entando las estrate#ias co'o objetos sin estado 9ue uedan ser co' artidos or el conte,to.

Patrones relacionados Fly+ei#htA los objetos &strate#y suelen ser buenos Peso5i#ero.

Te2(late %et&od (Co2(orta2iento de clases)


)e.ine en una o eracin el es9ueleto de un al#orit'o7 dele#ando en las subclases al#unos de sus asos. Per'ite 9ue las subclases rede.inan ciertos asos de un al#orit'o sin ca'biar su estructura. Aplicabilidad Para i' le'entar las artes de un al#orit'o 9ue no ca'bian y dejar 9ue sean las subclases 9uienes i' le'enten el co' orta'iento 9ue uede 1ariar. Cuando el co' orta'iento re etido de 1arias subclases deber<a .actori=arse y ser locali=ado en una clase co'?n ara e1itar cdi#o du licado. Para controlar las e,tensiones de las subclases. Puede de.inirse un ';todo lantilla 9ue lla'e a o eraciones de e ga c$e7 er'itiendo as< las e,tensiones slo en esos untos.

Participantes ClaseAbstracta. )e.ine operaciones!primitivas abstractas 9ue son de.inidas or las subclases ara i' le'entar los asos de un al#orit'o. 0' le'enta un ';todo lantilla 9ue de.ine el es9ueleto de un al#orit'o. &l ';todo lantilla lla'a a las o eraciones ri'iti1as as< co'o a o eraciones de.inidas en ClaseAbstracta o a las de otros objetos. ClaseConcreta. 0' le'enta las o eraciones ri'iti1as ara reali=ar los asos del al#orit'o es ec<.icos de las subclases.
,

Figura !': @emplate #et$od: estructura

Colaboraciones ClaseConcreta se basa en ClaseAbstracta ara i' le'entar los asos de un al#orit'o 9ue no ca'bian. Consecuencias 5os ';todos lantilla son una t;cnica .unda'ental de reultili=acin de cdi#o. "on articular'ente i' ortantes en las bibliotecas de clases7 ya 9ue son el 'odo de .actori=ar y e,traer el co' orta'iento co'?n de las clases de la biblioteca. 5os ';todos lantilla lle1an a una estructura de control in1ertido7 esto es7 cuando la clase adre lla'a a las o eraciones de una subclase y no al re1;s. &s i' ortante 9ue los ';todos lantilla es eci.i9uen 9u; o eraciones son en#anches (9ue puede ser rede.inidas) y cu:les son oe raciones abstractas (9ue debe ser rede.inidas) Patrones relacionados 5os FactoryMethod se lla'an 'uchas 1eces desde ';todos lantilla. "trate#yA los ';todos lantilla usan la herencia ara 'odi.icar una estrate#ias usan dele#acin ara 1ariar el al#orit'o co' leto. arte de un al#orit'o. 5as

8isitor (Co2(orta2iento de objetos)


/e resenta una o eracin sobre los ele'entos de una estructura de objetos. Per'ite de.inir una nue1a o eracin sin ca'biar las clases de los ele'entos sobre los 9ue o era.

#.

Aplicabilidad Cuando una estructura de objetos contiene 'uchas clases de objetos con di.erentes inter.aces y 9uere'os reali=ar o eraciones sobre esos ele'entos 9ue de enden de su clase concreta. Cuando se necesitan reali=ar 'uchas o eraciones distintas y no relacionadas sobre objetos de una estructura de objetos y 9uere'os e1itar Econta'inarF sus clases con dichas o eraciones. &l atrn 4isitor er'ite 'antener juntas o eraciones relacionadas de.ini;ndolas en una clase. Cuando las clases 9ue de.inen la estructura de objetos rara 1e= ca'bian. "i las clases de la estructura ca'bian con .recuencia7 robable'ente sea 'ejor de.inir las o eraciones en las ro ias clases.

Participantes +isitante. )eclara una o eracin 4isitar ara cada clase de o eracin &le'entoConcreto de la estructura de objetos. &l no'bre y la si#natura de la o eracin identi.ican a la clase 9ue en1<a la eticin 4isitar al 1isitante. &sto er'ite al 1isitante deter'inar la clase concreta de ele'ento 9ue est: siendo 1isitada. A continuacin el 1isitante uede acceder al ele'ento directa'ente a tra1;s de su inter.a= articular. +isitanteConcreto. 0' le'enta cada o eracin declarada or el 1isitante. Cada o eracin i' le'enta un .ra#'ento del al#orit'o de.inido ara la clase corres ondiente de la estructura. 4isitanteConcreto ro orciona el conte,to ara el al#orit'o y #uarda su estado local. Muchas 1eces este estado acu'ula resultados durante el recorrido de la estructura.
#-

)lemento. )e.ine una o eracin Ace tar 9ue to'a un 1isitante co'o ar#u'ento. )lementoConcreto. 0' le'enta una o eracin Ace tar 9ue to'a un 1isitante co'o ar#u'ento. )structuraDeObjetos. Puede enu'erar sus ele'entos. Puede ro orcionar una inter.a= de alto ni1el ara er'itir al 1isitante 1isitar a sus ele'entos. Puede ser un Co' osite o una coleccin7 co'o una lista o un conjunto.

Colaboraciones 8n cliente 9ue usa el atrn 4isitor debe crear un objeto 4isitanteConcreto y a continuacin recorrer la estructura7 1isitando cada objeto con el 1isitante. Cada 1e= 9ue se 1isita a un ele'ento7 este lla'a a la o eracin del 4isitante 9ue se corres onde con su clase. &l ele'ento se asa a s< 'is'o co'o ar#u'ento de la o eracin ara er'itir al 1isitante acceder a su estado7 en caso de 9ue sea necesario.

Consecuencias El 8isita te 5acilita a:adir ue8as operacio es . 5os 1isitantes .acilitan a6adir nue1as o eraciones 9ue de enden de los co' onentes de objetos co' lejos. Pode'os de.inir una nue1a o eracin sobre una estructura si' le'ente a6adiendo un nue1o 1isitante. 9 8isita te agrupa operacio es relacio adas y separa las 7ue o lo est4 . &l co' orta'iento si'ilar no est: des erdi#ado or las clases 9ue de.inen la estructura de objetos@ est: locali=ado en un 1isitante. 5as artes de co' orta'iento no relacionada se di1iden en sus ro ias subclases. Es di5cil a:adir ue8as clases de Eleme toCo creto . &l atrn 4isitor hace 9ue sea co' licado a6adir nue1as subclases de &le'ento. 5a cuestin .unda'ental a la hora de a licar el atrn 4isitor es si es ':s robable 9ue ca'bie el al#orit'o a licado sobre una estructura de objetos o las clases de los objetos 9ue co' onen la estructura. Aisitar 8arias jerar7uas de clases. As< co'o un 0terator slo uede 1isitar a los objetos 9ue tienen una clase adre co'?n7 el atrn 4isitor uede 1isitar objetos 9ue no tienen un ancestro co'?n. "e uede a6adir cual9uier ti o de objeto a la inter.a= de un 4isitante. Acumular el estado. 5os 1isitantes ueden acu'ular estado a 'edida 9ue 1an 1isitando cada ele'ento de la estructura de objetos. <omper la e capsulaci& . &l atrn suele obli#arnos a ro orcionar o eraciones ?blicas 9ue accedan al estado interno de un ele'ento7 lo 9ue uede co' ro'eter la enca sulacin.

Patrones relacionados Co' ositeA los 1isitantes ueden usarse ara a licar una o eracin sobre una estructura de objetos de.inida or el atrn Co' osite. 0nter reterA se uede a licar el atrn 4isitor ara lle1ar a cabo la inter retacin.

#1

RE0ACIONES ENTRE 0OS PATRONES

También podría gustarte