Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



jueves, 31 de octubre de 2013

Patrón Decorador: Cafes y condimentos. Adjuntar responsabilidad adicional a un objeto dinámicamente.

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 heredan
Cafe 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:


Vista final de la aplicación:


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