SlideShare a Scribd company logo
1 of 11
Download to read offline
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();
}
}

More Related Content

Viewers also liked

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
 

Viewers also liked (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 to decorator

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

Recently uploaded

¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptxguillermosantana15
 
presentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricopresentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricoalexcala5
 
Presentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxPresentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxYajairaMartinez30
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 
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
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASDOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASPersonalJesusGranPod
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTFundación YOD YOD
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingKevinCabrera96
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfalexquispenieto2
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfKEVINYOICIAQUINOSORI
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAJOSLUISCALLATAENRIQU
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica
07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica
07 MECANIZADO DE CONTORNOS para torno cnc universidad catolicalf1231
 
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
 
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kVEl proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kVSebastianPaez47
 
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAIPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAJAMESDIAZ55
 
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxPPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxSergioGJimenezMorean
 

Recently uploaded (20)

¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
 
presentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricopresentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctrico
 
Presentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxPresentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptx
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
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
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASDOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NIST
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards Deming
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdf
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdf
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica
07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica
07 MECANIZADO DE CONTORNOS para torno cnc universidad catolica
 
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
 
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kVEl proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
 
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAIPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
 
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxPPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
 

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