patrón de diseño decorador

4
Decorador (Decorator) Patr´ on Estructural Prop´ osito nadir responsabilidades a un objeto din´ amicamente, proporcionando una alternativa flexible a la exten- si´ on de una clase Motivaci´on Deseo de a˜ nadir responsabilidades a objetos in- dividuales, no a una clase Ejemplo: Interfaz gr´ afica que permite a˜ nadir bor- des o barras de desplazamiento a cualquier com- ponente Soluci´ on: Utilizar herencia para extender las res- ponsabilidades de la clase Problema: Inflexible! (est´ atico) Soluci´ on: Encapsular dentro de otro objeto que nade las nuevas responsabilidades (decorador ) 1

Upload: manual

Post on 17-Feb-2016

2 views

Category:

Documents


0 download

DESCRIPTION

Patrón de diseño Decorate

TRANSCRIPT

Page 1: Patrón de diseño decorador

Decorador (Decorator)

Patron Estructural

Proposito

Anadir responsabilidades a un objeto dinamicamente,proporcionando una alternativa flexible a la exten-sion de una clase

Motivacion

• Deseo de anadir responsabilidades a objetos in-dividuales, no a una clase

• Ejemplo: Interfaz grafica que permite anadir bor-des o barras de desplazamiento a cualquier com-ponente

• Solucion: Utilizar herencia para extender las res-ponsabilidades de la clase

• Problema: Inflexible! (estatico)

• Solucion: Encapsular dentro de otro objeto queanade las nuevas responsabilidades (decorador)

1

Page 2: Patrón de diseño decorador

Motivacion (cont.)

• La superclase decoradora implementa la interfazdel componente visual, redirigiendo los metodosal componente que encapsula

• Las subclases decoradoras refinan los metodosdel componente, anadiendo responsabilidades

• Los clientes de los componentes visuales no ha-cen distincion entre los componentes decoradosy sin decorar

Aplicabilidad

• Anadir responsabilidades a objetos de maneradinamica y transparente

• Para suprimir responsabilidades de los objetos

• Cuando no es practico el uso de la herencia

2

Page 3: Patrón de diseño decorador

Estructura

Participantes

• Componente (Component)

Define la interfaz para los objetos que pueden tener res-ponsabilidades anadidas

• Componente Concreto (ConcreteComponent)

Define un objeto al cual se le pueden agregar respon-sabilidades adicionales

• Decorador (Decorator)

Mantiene referencia al componente asociado

Implementa la interfaz de la superclase Componente dele-gando en el componente asociado

• Decorador Concreto (ConcreteDecorator)

Anade responsabilidades al componente (refinamiento)

3

Page 4: Patrón de diseño decorador

Colaboraciones

• El decorador redirige las peticiones al compo-nente asociado

• Opcionalmente puede realizar tareas adicionalesantes y despues de redirigir la peticion

Consecuencias

• Mas flexible que la herencia

◦ Configurable en tiempo de ejecucion

◦ Evita herencia multiple

• Evita la aparicion de clases con muchas respon-sabilidades en las clases superiores de la jerar-quıa

◦ Incorporacion incremental de responsabilidades

◦ No es necesario pagar por funciones no requeridas

• Problemas con la identidad de objetos

• Gran numero de objetos pequenos

Implementacion

• Decorador debe cumplir la interfaz Componente

• Omision de la clase abstracta Decorador

• Mantener la clase Componente ligera

• Cambiar la piel del objeto (Decorador) vs. cam-biar las tripas (Estrategia)

4