SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
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();
}
}

Más contenido relacionado

Destacado

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
 

Destacado (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
 

Similar a decorator

Similar a 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)
 

Último

clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinosDayanaCarolinaAP
 
CONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptx
CONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptxCONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptx
CONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptxBrayanJavierCalle2
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptCRISTOFERSERGIOCANAL
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxbingoscarlet
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdfvictoralejandroayala2
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajasjuanprv
 
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfTAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfAntonioGonzalezIzqui
 
TERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOL
TERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOLTERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOL
TERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOLdanilojaviersantiago
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacajeremiasnifla
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.pptoscarvielma45
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Dr. Edwin Hernandez
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdfCristhianZetaNima
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaXimenaFallaLecca1
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOFritz Rebaza Latoche
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónXimenaFallaLecca1
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOLUISDAVIDVIZARRETARA
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptxBRAYANJOSEPTSANJINEZ
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesMIGUELANGEL2658
 

Último (20)

clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinos
 
CONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptx
CONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptxCONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptx
CONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptx
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdf
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajas
 
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfTAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
 
TERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOL
TERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOLTERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOL
TERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOL
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpaca
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcción
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias locales
 

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(); } }