Вы находитесь на странице: 1из 9

DECORATOR

Clasificación: Estructural
Motivación
• Suppose you are working on a user interface toolkit and you wish to support adding borders and scroll bars
to windows. You could define an inheritance hierarchy like ...
• But the Decorator pattern suggests giving the client the ability to specify whatever combination of "features"
is desired.

https://sourcemaking.com/design_patterns/decorator
Decorator
• Problema
• Se requiere adicionar comportamiento en tiempo de ejecución, y la solución
de herencia es compleja. De qué otra forma asignamos nuevas
responsabilidades dinámicamente?

• Solución
• Usar decoradores: adiciona responsabilidades adicionales a un objeto,
dinámicamente. Provee una alternativa flexible para cuando usas subclases
para extender funcionalidad.
3
Solución
Ejemplo
Consecuencias
• Mayor flexibilidad que la herencia estática.
• Se adicionan y remueven responsabilidades at run-time, simplemente
attaching and detaching them.
• Se hace fácil adicionar una propiedad dos veces. Ej. Dos bordes.
• Evita clases con características cargadas de clases superiores en la
jerarquía. Así, una aplicación no paga por las características que no usa.
• El decorador y sus componentes no son idénticos. No confiar en la
identidad de objetos.
• Muchos objetos pequeños, que lucen parecidos. Solo difieren en la forma
de ser interconectados y no en la clase o valores de variables. Estos
sistemas son difíciles de configurar, entenderlos, y duros de aprender y
hacer debug.
• El poder del Decorador, requiere que la instanciación de las cadenas
de objetos sea completamente desacoplada del cliente que los usa.
Por esto, típicamente es acompañada a través de uso de objetos
Factory que instancian las cadenas basadas en alguna información de
configuración.
• En testing, el Decorator es útil para probar pre y pos condiciones.
Patrones relacionados
• Adapter: el decorador es diferente, en que este solo cambia las
responsabilidades del objeto, no su interfaz; el adaptador da al objeto
una nueva interfaz.
• Composite: Podría verse el decorador como un composite con solo un
componente. Pero el decorador adiciona responsabilidades, y su
intención no es agregar objetos. (objetos agregados)
• Strategy: el decorador solo cambia el skin del objeto; el strategy
permite cambiar “guts” (barriga)
Reto…

Cómo remover un
Decorador?
• Se espera: Ejemplo en diseño y en implementación funcional.

Вам также может понравиться