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

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
Cherradi -
 
4º domingo adviento ciclo c
4º domingo adviento ciclo c4º domingo adviento ciclo c
4º domingo adviento ciclo c
educarconjesus
 
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
 
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
Espacio Público
 
Proyecto final tabares 9e camilo
Proyecto final tabares 9e camiloProyecto final tabares 9e camilo
Proyecto final tabares 9e camilo
Aligi321
 

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

Framework by Marcos Acosta
Framework by Marcos AcostaFramework by Marcos Acosta
Framework by Marcos Acosta
Marcos Acosta
 
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
AndresRealp1
 

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

analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
Ricardo705519
 
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONALSESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
EdwinC23
 

Dernier (20)

27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt
 
Six Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo processSix Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo process
 
libro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operacioneslibro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operaciones
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
 
semana-08-clase-transformadores-y-norma-eep.ppt
semana-08-clase-transformadores-y-norma-eep.pptsemana-08-clase-transformadores-y-norma-eep.ppt
semana-08-clase-transformadores-y-norma-eep.ppt
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
 
Presentacion de la ganaderia en la región
Presentacion de la ganaderia en la regiónPresentacion de la ganaderia en la región
Presentacion de la ganaderia en la región
 
Cereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. CerealesCereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. Cereales
 
[1LLF] UNIDADES, MAGNITUDES FÍSICAS Y VECTORES.pdf
[1LLF] UNIDADES, MAGNITUDES FÍSICAS Y VECTORES.pdf[1LLF] UNIDADES, MAGNITUDES FÍSICAS Y VECTORES.pdf
[1LLF] UNIDADES, MAGNITUDES FÍSICAS Y VECTORES.pdf
 
2024 GUIA PRACTICAS MICROBIOLOGIA- UNA 2017 (1).pdf
2024 GUIA PRACTICAS MICROBIOLOGIA- UNA 2017 (1).pdf2024 GUIA PRACTICAS MICROBIOLOGIA- UNA 2017 (1).pdf
2024 GUIA PRACTICAS MICROBIOLOGIA- UNA 2017 (1).pdf
 
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONALSESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
 
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf  PARA TRABAJO SEGUROATS-FORMATO cara.pdf  PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdf
 
Presentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potablePresentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potable
 
Minería convencional: datos importantes y conceptos
Minería convencional: datos importantes y conceptosMinería convencional: datos importantes y conceptos
Minería convencional: datos importantes y conceptos
 
TIPOS DE SOPORTES - CLASIFICACION IG.pdf
TIPOS DE SOPORTES - CLASIFICACION IG.pdfTIPOS DE SOPORTES - CLASIFICACION IG.pdf
TIPOS DE SOPORTES - CLASIFICACION IG.pdf
 
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVOESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
 
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
 
Introduction to Satellite Communication_esp_FINAL.ppt
Introduction to Satellite Communication_esp_FINAL.pptIntroduction to Satellite Communication_esp_FINAL.ppt
Introduction to Satellite Communication_esp_FINAL.ppt
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdf
 

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