Patrón Decorador:
Cafés y Condimentos
"Adjuntar responsabilidad adicional a un objeto dinámicamente."Aplicación:
- Añadir objetos individuales de forma dinámica y transparente
- Responsabilidades de un objeto pueden ser retiradas
- Cuando la extensión mediante la herencia no es viable
- Hay una necesidad de extender la funcionalidad de una clase, pero no hay razones para extenderlo a través de la herencia.
- Existe la necesidad de extender dinámicamente la funcionalidad de un objeto y quizás quitar la funcionalidad extendida. (ejemplo de Cafés y Condimentos)
Esquema de las clases que componen el patrón Decorador |
Ejemplo de aplicación:
Tenemos una tienda de cafés, donde tenemos varios tipos de cafés y condimentos (chocolate, leche, canela, leche condesada), queremos hacer un programa que evalué el coste del café, según los condimentos que le indiquemos (el usuario elegirá entre uno o varios, o incluso todos). Además el programa será flexible, ya que en el futuro, se le puede añadirse más tipos de cafés y condimentos.
Empezamos con el código de la clase Bebida:
Y las clases que la heredanCafe Espresso:
Cafe HoseBlend
Cafe Decaf:
Cafe DarkRoast:
La Clase CondimentoDecorador:
Y las clases que lo heredan:Chocalete:
Canela:
Hielo:
Leche Condensada:
Leche
El programa Fmain:
Es muy interesante la forma de implementarlo siguiendo los valores de los checkbox:
Enlace de descarga: enlace a box.com
Fuente:
http://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o)
http://barrospascual.blogspot.com.es/2007/06/el-patrn-decorador.html
Libro:
Head First Design Patterns