SlideShare une entreprise Scribd logo
1  sur  11
Télécharger pour lire hors ligne
Técnicas de Programación - Curso 2008/09
(Esther Guerra Sánchez)
Patrones de Diseño
Patrón estructural Decorator
Decorator
Propósito
Permite añadir responsabilidades extra a objetos
concretos de manera dinámica
Proporciona una alternativa flexible a la herencia
para extender funcionalidad
También conocido como wrapper
Decorator
Motivación
A veces se quiere añadir funcionalidad a un objeto
concreto, no a una clase entera
Ej: Un toolkit para GUIs proporciona soporte para añadir
marcos, barras de desplazamiento... a componentes
Solución:
Herencia: no es flexible, la funcionalidad se añade estáticamente
Definir una clase “decoradora” que envuelve al componente, y le
proporciona la funcionalidad adicional requerida: más flexible,
transparente al cliente, se pueden anidar decoradores
Decorator
Estructura
VisualComponent
draw()
Decorator
draw()
TextView
draw() component.draw();
component
1
c:TextView
Ejemplo de
componente textual
con scroll y marco:
b:ScrollDecorator
component
a:BorderDecorator
component
ScrollDecorator
- scrollPosition
draw()
scrollTo()
BorderDecorator
- borderWidth
draw()
drawBorder()
super.draw();
drawBorder();
Decorator
Aplicabilidad
Usa el patrón Decorator:
Para añadir responsabilidades a objetos concretos de
manera dinámica y transparente, esto es, sin afectar a
otros objetos
Para responsabilidades que se pueden añadir y quitar
Cuando la herencia sea impracticable, porque implique
crear múltiples subclases para todas las combinaciones
posibles (ej. TextViewScroll, TextViewScrollBorder, ...)
Decorator
Estructura
Component
operation()
Decorator
operation()
ConcreteComponent
operation() component.operation();
component
1
ConcreteDecoratorA
- addedState
operation()
ConcreteDecoratorB
operation()
addedBehaviour()
super.operation();
addedBehaviour();
Decorator
Participantes
Component (VisualComponent): define la interfaz de los
objetos a los que se puede añadir responsabilidades de
manera dinámica
ConcreteComponent (TextView): define un objeto al que
añadir responsabilidades de manera dinámica
Decorator: mantiene una referencia al objeto componente
y define una interfaz conforme a la del componente
ConcreteDecorator (BorderDecorator, ScrollDecorator):
añade responsabilidades al componente al que referencia
Decorator
Colaboraciones
:Client
:ConcreteDecorator
c:ConcreteComponent
operation()
operation()
addedBehaviour()
new ()
new (c)
Decorator
Consecuencias
Es más flexible que la herencia estática
Las responsabilidades se añaden y eliminan dinámicamente
Facilita definir una propiedad varias veces (ej. doble marco)
Evita que las clases más altas en la jerarquía estén
demasiado cargadas de funcionalidad y sean complejas
No hay precio que pagar por propiedades que no se usan
Facilita la definición de nuevos decoradores
Un decorador y el componente al que se refiere no son
idénticos (esto es, tienen distinto identificador)
Provoca la creación de muchos objetos pequeños
parecidos y encadenados, complicando la depuración
Decorator
Implementación
Un componente y su decorador deben compartir la misma interfaz
Se puede omitir la clase abstracta Decorator si sólo se va a definir una
responsabilidad
Mantener una clase Component ligera (definición de la interfaz, no
almacén de datos). En caso contrario se incrementa la probabilidad de
que las subclases hereden características que no necesitan
¿Cuál es la diferencia entre Decorator y Strategy?
Strategy: accedo al componente, el componente cambia
Decorator: accedo al decorador, el componente no cambia
:Strategy
:Component
strategy
:Strategy
strategy
:Decorator
:Decorator
component
:Component
component
Decorator
Código de ejemplo
public interface VisualComponent { // component
public void draw();
}
public class TextView implements VisualComponent { // concrete component
public void draw () { ... }
}
public abstrac class Decorator implements VisualComponent { // decorator
protected VisualComponent _component;
public Decorator (VisualComponent vc) { _component = vc; }
public void draw () { _component.draw(); }
}
public class BorderDecorator extends Decorator { // concrete decorator
public BorderDecorator (VisualComponent vc) { super(vc); }
public void draw() {
super.draw();
drawBorder();
}
public void drawBorder() { ... }
}
public class Test { // client
public static void main (String args[]) {
VisualComponent vc = new BorderDecorator(new TextView());
vc.draw();
}
}

Contenu connexe

En vedette

Outils nomades3
Outils nomades3Outils nomades3
Outils nomades3cddp46
 
Rapport de-la-commission-de-reflexion-sur-la-fin-de-vie-en-france
Rapport de-la-commission-de-reflexion-sur-la-fin-de-vie-en-franceRapport de-la-commission-de-reflexion-sur-la-fin-de-vie-en-france
Rapport de-la-commission-de-reflexion-sur-la-fin-de-vie-en-franceBâle Région Mag
 
Weekly actions du 10 au 14 mai 2010
Weekly actions du 10 au 14 mai 2010Weekly actions du 10 au 14 mai 2010
Weekly actions du 10 au 14 mai 2010Cherradi -
 
4º domingo adviento ciclo c
4º domingo adviento ciclo c4º domingo adviento ciclo c
4º domingo adviento ciclo ceducarconjesus
 
Desarrollo de Sitio Web para la AEPUM
Desarrollo de Sitio Web para la AEPUMDesarrollo de Sitio Web para la AEPUM
Desarrollo de Sitio Web para la AEPUMAntonio López Blanes
 
Stratžgie digitale levi's marine, marion, yasmine, johanna, audrey, hemza,...
Stratžgie digitale levi's   marine, marion,  yasmine, johanna, audrey, hemza,...Stratžgie digitale levi's   marine, marion,  yasmine, johanna, audrey, hemza,...
Stratžgie digitale levi's marine, marion, yasmine, johanna, audrey, hemza,...pittetjohanna
 
Superstitions autour des chats
Superstitions autour des chatsSuperstitions autour des chats
Superstitions autour des chatsSaqqarah 31
 
Petición de Información Ministerio de la salud 22 octubre
Petición de Información Ministerio de la salud 22 octubrePetición de Información Ministerio de la salud 22 octubre
Petición de Información Ministerio de la salud 22 octubreEspacio Público
 
AÑORANZA
AÑORANZAAÑORANZA
AÑORANZAgoya56
 
Proyecto final tabares 9e camilo
Proyecto final tabares 9e camiloProyecto final tabares 9e camilo
Proyecto final tabares 9e camiloAligi321
 

En vedette (18)

Guide de survie en territoires connectés : Edition commerçants
Guide de survie en territoires connectés : Edition commerçantsGuide de survie en territoires connectés : Edition commerçants
Guide de survie en territoires connectés : Edition commerçants
 
Outils nomades3
Outils nomades3Outils nomades3
Outils nomades3
 
Le discours indirect
Le discours indirectLe discours indirect
Le discours indirect
 
frankrijk.nl
frankrijk.nl frankrijk.nl
frankrijk.nl
 
Retrospective 2012
Retrospective 2012Retrospective 2012
Retrospective 2012
 
Rapport de-la-commission-de-reflexion-sur-la-fin-de-vie-en-france
Rapport de-la-commission-de-reflexion-sur-la-fin-de-vie-en-franceRapport de-la-commission-de-reflexion-sur-la-fin-de-vie-en-france
Rapport de-la-commission-de-reflexion-sur-la-fin-de-vie-en-france
 
Weekly actions du 10 au 14 mai 2010
Weekly actions du 10 au 14 mai 2010Weekly actions du 10 au 14 mai 2010
Weekly actions du 10 au 14 mai 2010
 
4º domingo adviento ciclo c
4º domingo adviento ciclo c4º domingo adviento ciclo c
4º domingo adviento ciclo c
 
Passé composé facile
Passé composé facilePassé composé facile
Passé composé facile
 
Desarrollo de Sitio Web para la AEPUM
Desarrollo de Sitio Web para la AEPUMDesarrollo de Sitio Web para la AEPUM
Desarrollo de Sitio Web para la AEPUM
 
Elfen lied lilium
Elfen lied   liliumElfen lied   lilium
Elfen lied lilium
 
Stratžgie digitale levi's marine, marion, yasmine, johanna, audrey, hemza,...
Stratžgie digitale levi's   marine, marion,  yasmine, johanna, audrey, hemza,...Stratžgie digitale levi's   marine, marion,  yasmine, johanna, audrey, hemza,...
Stratžgie digitale levi's marine, marion, yasmine, johanna, audrey, hemza,...
 
Heridas de agua
Heridas de aguaHeridas de agua
Heridas de agua
 
Superstitions autour des chats
Superstitions autour des chatsSuperstitions autour des chats
Superstitions autour des chats
 
Petición de Información Ministerio de la salud 22 octubre
Petición de Información Ministerio de la salud 22 octubrePetición de Información Ministerio de la salud 22 octubre
Petición de Información Ministerio de la salud 22 octubre
 
AÑORANZA
AÑORANZAAÑORANZA
AÑORANZA
 
Calendario 2012
Calendario 2012Calendario 2012
Calendario 2012
 
Proyecto final tabares 9e camilo
Proyecto final tabares 9e camiloProyecto final tabares 9e camilo
Proyecto final tabares 9e camilo
 

Similaire à decorator

Similaire à decorator (20)

Patron de diseño decorator
Patron de diseño decoratorPatron de diseño decorator
Patron de diseño decorator
 
Presentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoFPresentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoF
 
Patron decorador
Patron decoradorPatron decorador
Patron decorador
 
Presentación sobre Display Suite en el Drupal Day Valencia 2012
Presentación sobre Display Suite en el Drupal Day Valencia 2012Presentación sobre Display Suite en el Drupal Day Valencia 2012
Presentación sobre Display Suite en el Drupal Day Valencia 2012
 
Decorator
DecoratorDecorator
Decorator
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......
 
Arquitecturas Dirigidas por la Experiencia
Arquitecturas Dirigidas por la ExperienciaArquitecturas Dirigidas por la Experiencia
Arquitecturas Dirigidas por la Experiencia
 
Framework by Marcos Acosta
Framework by Marcos AcostaFramework by Marcos Acosta
Framework by Marcos Acosta
 
Cliente/Servidor
Cliente/ServidorCliente/Servidor
Cliente/Servidor
 
Presentación de eclipse(componentes básicos)
Presentación de eclipse(componentes básicos)Presentación de eclipse(componentes básicos)
Presentación de eclipse(componentes básicos)
 
Framework
FrameworkFramework
Framework
 
Tutorial eclipse
Tutorial eclipseTutorial eclipse
Tutorial eclipse
 
Diseño de Patrones (Fachada)
Diseño de Patrones (Fachada)Diseño de Patrones (Fachada)
Diseño de Patrones (Fachada)
 
Presentación1
Presentación1Presentación1
Presentación1
 
Framework
FrameworkFramework
Framework
 
Clase 04 Html
Clase 04   HtmlClase 04   Html
Clase 04 Html
 
Framework
FrameworkFramework
Framework
 
Diseño en-el-nivel-de-componentes
Diseño en-el-nivel-de-componentesDiseño en-el-nivel-de-componentes
Diseño en-el-nivel-de-componentes
 
Mv vol2 ver5.0(corregido)
Mv vol2 ver5.0(corregido)Mv vol2 ver5.0(corregido)
Mv vol2 ver5.0(corregido)
 

Dernier

Fijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEFijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEANDECE
 
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...esandoval7
 
Trabajo en altura de acuerdo a la normativa peruana
Trabajo en altura de acuerdo a la normativa peruanaTrabajo en altura de acuerdo a la normativa peruana
Trabajo en altura de acuerdo a la normativa peruana5extraviado
 
LIQUIDACION OBRAS PUBLICAS POR CONTRATA.pdf
LIQUIDACION OBRAS PUBLICAS  POR CONTRATA.pdfLIQUIDACION OBRAS PUBLICAS  POR CONTRATA.pdf
LIQUIDACION OBRAS PUBLICAS POR CONTRATA.pdfManuelVillarreal44
 
Descubrimiento de la penicilina en la segunda guerra mundial
Descubrimiento de la penicilina en la segunda guerra mundialDescubrimiento de la penicilina en la segunda guerra mundial
Descubrimiento de la penicilina en la segunda guerra mundialyajhairatapia
 
POBLACIONES CICLICAS Y NO CICLICAS ......
POBLACIONES CICLICAS Y NO CICLICAS ......POBLACIONES CICLICAS Y NO CICLICAS ......
POBLACIONES CICLICAS Y NO CICLICAS ......dianamontserratmayor
 
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxAMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxLuisvila35
 
SEMANA 6 MEDIDAS DE TENDENCIA CENTRAL.pdf
SEMANA  6 MEDIDAS DE TENDENCIA CENTRAL.pdfSEMANA  6 MEDIDAS DE TENDENCIA CENTRAL.pdf
SEMANA 6 MEDIDAS DE TENDENCIA CENTRAL.pdffredyflores58
 
NOM-002-STPS-2010, combate contra incendio.pptx
NOM-002-STPS-2010, combate contra incendio.pptxNOM-002-STPS-2010, combate contra incendio.pptx
NOM-002-STPS-2010, combate contra incendio.pptxJairReyna1
 
produccion de cerdos. 2024 abril 20..pptx
produccion de cerdos. 2024 abril 20..pptxproduccion de cerdos. 2024 abril 20..pptx
produccion de cerdos. 2024 abril 20..pptxEtse9
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCANDECE
 
Tarea de UTP matematices y soluciones ingenieria
Tarea de UTP matematices y soluciones ingenieriaTarea de UTP matematices y soluciones ingenieria
Tarea de UTP matematices y soluciones ingenieriaSebastianQP1
 
Fe_C_Tratamientos termicos_uap _3_.ppt
Fe_C_Tratamientos termicos_uap   _3_.pptFe_C_Tratamientos termicos_uap   _3_.ppt
Fe_C_Tratamientos termicos_uap _3_.pptVitobailon
 
594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...
594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...
594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...humberto espejo
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPJosLuisFrancoCaldern
 
01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx
01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx
01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptxluiscisnerosayala23
 
lean manufacturing and its definition for industries
lean manufacturing and its definition for industrieslean manufacturing and its definition for industries
lean manufacturing and its definition for industriesbarom
 
4.3 Subestaciones eléctricas componentes principales .pptx
4.3 Subestaciones eléctricas componentes principales .pptx4.3 Subestaciones eléctricas componentes principales .pptx
4.3 Subestaciones eléctricas componentes principales .pptxEfrain Yungan
 
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidasSOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidasLeonardoMendozaDvila
 
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Francisco Javier Mora Serrano
 

Dernier (20)

Fijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEFijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSE
 
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...
 
Trabajo en altura de acuerdo a la normativa peruana
Trabajo en altura de acuerdo a la normativa peruanaTrabajo en altura de acuerdo a la normativa peruana
Trabajo en altura de acuerdo a la normativa peruana
 
LIQUIDACION OBRAS PUBLICAS POR CONTRATA.pdf
LIQUIDACION OBRAS PUBLICAS  POR CONTRATA.pdfLIQUIDACION OBRAS PUBLICAS  POR CONTRATA.pdf
LIQUIDACION OBRAS PUBLICAS POR CONTRATA.pdf
 
Descubrimiento de la penicilina en la segunda guerra mundial
Descubrimiento de la penicilina en la segunda guerra mundialDescubrimiento de la penicilina en la segunda guerra mundial
Descubrimiento de la penicilina en la segunda guerra mundial
 
POBLACIONES CICLICAS Y NO CICLICAS ......
POBLACIONES CICLICAS Y NO CICLICAS ......POBLACIONES CICLICAS Y NO CICLICAS ......
POBLACIONES CICLICAS Y NO CICLICAS ......
 
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxAMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
 
SEMANA 6 MEDIDAS DE TENDENCIA CENTRAL.pdf
SEMANA  6 MEDIDAS DE TENDENCIA CENTRAL.pdfSEMANA  6 MEDIDAS DE TENDENCIA CENTRAL.pdf
SEMANA 6 MEDIDAS DE TENDENCIA CENTRAL.pdf
 
NOM-002-STPS-2010, combate contra incendio.pptx
NOM-002-STPS-2010, combate contra incendio.pptxNOM-002-STPS-2010, combate contra incendio.pptx
NOM-002-STPS-2010, combate contra incendio.pptx
 
produccion de cerdos. 2024 abril 20..pptx
produccion de cerdos. 2024 abril 20..pptxproduccion de cerdos. 2024 abril 20..pptx
produccion de cerdos. 2024 abril 20..pptx
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRC
 
Tarea de UTP matematices y soluciones ingenieria
Tarea de UTP matematices y soluciones ingenieriaTarea de UTP matematices y soluciones ingenieria
Tarea de UTP matematices y soluciones ingenieria
 
Fe_C_Tratamientos termicos_uap _3_.ppt
Fe_C_Tratamientos termicos_uap   _3_.pptFe_C_Tratamientos termicos_uap   _3_.ppt
Fe_C_Tratamientos termicos_uap _3_.ppt
 
594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...
594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...
594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
 
01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx
01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx
01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx
 
lean manufacturing and its definition for industries
lean manufacturing and its definition for industrieslean manufacturing and its definition for industries
lean manufacturing and its definition for industries
 
4.3 Subestaciones eléctricas componentes principales .pptx
4.3 Subestaciones eléctricas componentes principales .pptx4.3 Subestaciones eléctricas componentes principales .pptx
4.3 Subestaciones eléctricas componentes principales .pptx
 
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidasSOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
 
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
 

decorator

  • 1. Técnicas de Programación - Curso 2008/09 (Esther Guerra Sánchez) Patrones de Diseño Patrón estructural Decorator
  • 2. Decorator Propósito Permite añadir responsabilidades extra a objetos concretos de manera dinámica Proporciona una alternativa flexible a la herencia para extender funcionalidad También conocido como wrapper
  • 3. Decorator Motivación A veces se quiere añadir funcionalidad a un objeto concreto, no a una clase entera Ej: Un toolkit para GUIs proporciona soporte para añadir marcos, barras de desplazamiento... a componentes Solución: Herencia: no es flexible, la funcionalidad se añade estáticamente Definir una clase “decoradora” que envuelve al componente, y le proporciona la funcionalidad adicional requerida: más flexible, transparente al cliente, se pueden anidar decoradores
  • 4. Decorator Estructura VisualComponent draw() Decorator draw() TextView draw() component.draw(); component 1 c:TextView Ejemplo de componente textual con scroll y marco: b:ScrollDecorator component a:BorderDecorator component ScrollDecorator - scrollPosition draw() scrollTo() BorderDecorator - borderWidth draw() drawBorder() super.draw(); drawBorder();
  • 5. Decorator Aplicabilidad Usa el patrón Decorator: Para añadir responsabilidades a objetos concretos de manera dinámica y transparente, esto es, sin afectar a otros objetos Para responsabilidades que se pueden añadir y quitar Cuando la herencia sea impracticable, porque implique crear múltiples subclases para todas las combinaciones posibles (ej. TextViewScroll, TextViewScrollBorder, ...)
  • 7. Decorator Participantes Component (VisualComponent): define la interfaz de los objetos a los que se puede añadir responsabilidades de manera dinámica ConcreteComponent (TextView): define un objeto al que añadir responsabilidades de manera dinámica Decorator: mantiene una referencia al objeto componente y define una interfaz conforme a la del componente ConcreteDecorator (BorderDecorator, ScrollDecorator): añade responsabilidades al componente al que referencia
  • 9. Decorator Consecuencias Es más flexible que la herencia estática Las responsabilidades se añaden y eliminan dinámicamente Facilita definir una propiedad varias veces (ej. doble marco) Evita que las clases más altas en la jerarquía estén demasiado cargadas de funcionalidad y sean complejas No hay precio que pagar por propiedades que no se usan Facilita la definición de nuevos decoradores Un decorador y el componente al que se refiere no son idénticos (esto es, tienen distinto identificador) Provoca la creación de muchos objetos pequeños parecidos y encadenados, complicando la depuración
  • 10. Decorator Implementación Un componente y su decorador deben compartir la misma interfaz Se puede omitir la clase abstracta Decorator si sólo se va a definir una responsabilidad Mantener una clase Component ligera (definición de la interfaz, no almacén de datos). En caso contrario se incrementa la probabilidad de que las subclases hereden características que no necesitan ¿Cuál es la diferencia entre Decorator y Strategy? Strategy: accedo al componente, el componente cambia Decorator: accedo al decorador, el componente no cambia :Strategy :Component strategy :Strategy strategy :Decorator :Decorator component :Component component
  • 11. Decorator Código de ejemplo public interface VisualComponent { // component public void draw(); } public class TextView implements VisualComponent { // concrete component public void draw () { ... } } public abstrac class Decorator implements VisualComponent { // decorator protected VisualComponent _component; public Decorator (VisualComponent vc) { _component = vc; } public void draw () { _component.draw(); } } public class BorderDecorator extends Decorator { // concrete decorator public BorderDecorator (VisualComponent vc) { super(vc); } public void draw() { super.draw(); drawBorder(); } public void drawBorder() { ... } } public class Test { // client public static void main (String args[]) { VisualComponent vc = new BorderDecorator(new TextView()); vc.draw(); } }