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

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
 

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

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
 

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

UC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfUC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
refrielectriccarlyz
 
S3-OXIDOS-HIDROXIDOS-CARBONATOS (mineralogia)
S3-OXIDOS-HIDROXIDOS-CARBONATOS (mineralogia)S3-OXIDOS-HIDROXIDOS-CARBONATOS (mineralogia)
S3-OXIDOS-HIDROXIDOS-CARBONATOS (mineralogia)
samuelsan933
 
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
 

Recently uploaded (20)

UC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfUC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
 
“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...
 
Arquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo LimacheArquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo Limache
 
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
 
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
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
 
S3-OXIDOS-HIDROXIDOS-CARBONATOS (mineralogia)
S3-OXIDOS-HIDROXIDOS-CARBONATOS (mineralogia)S3-OXIDOS-HIDROXIDOS-CARBONATOS (mineralogia)
S3-OXIDOS-HIDROXIDOS-CARBONATOS (mineralogia)
 
portafolio final manco 2 1816827 portafolio de evidencias
portafolio final manco 2 1816827 portafolio de evidenciasportafolio final manco 2 1816827 portafolio de evidencias
portafolio final manco 2 1816827 portafolio de evidencias
 
Auditoría de Sistemas de Gestión
Auditoría    de   Sistemas     de GestiónAuditoría    de   Sistemas     de Gestión
Auditoría de Sistemas de Gestión
 
ELASTICIDAD PRECIO DE LA DEMaaanANDA.ppt
ELASTICIDAD PRECIO DE LA DEMaaanANDA.pptELASTICIDAD PRECIO DE LA DEMaaanANDA.ppt
ELASTICIDAD PRECIO DE LA DEMaaanANDA.ppt
 
TAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientosTAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientos
 
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
 
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
 
1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas
 
docsity-manzaneo-y-lotizacion para habilitacopm urbana
docsity-manzaneo-y-lotizacion para habilitacopm urbanadocsity-manzaneo-y-lotizacion para habilitacopm urbana
docsity-manzaneo-y-lotizacion para habilitacopm urbana
 
DIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJO
DIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJODIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJO
DIAPOSITIVAS DE SEGURIDAD Y SALUD EN EL TRABAJO
 
Presentación Instrumentos de Medicion Electricos.pptx
Presentación Instrumentos de Medicion Electricos.pptxPresentación Instrumentos de Medicion Electricos.pptx
Presentación Instrumentos de Medicion Electricos.pptx
 
Aportes a la Arquitectura de Le Corbusier y Mies Van Der Rohe.pdf
Aportes a la Arquitectura de Le Corbusier y Mies Van Der Rohe.pdfAportes a la Arquitectura de Le Corbusier y Mies Van Der Rohe.pdf
Aportes a la Arquitectura de Le Corbusier y Mies Van Der Rohe.pdf
 
ARMADURAS METODO NODOS.pptx......................
ARMADURAS METODO NODOS.pptx......................ARMADURAS METODO NODOS.pptx......................
ARMADURAS METODO NODOS.pptx......................
 
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
 

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