Diferencia entre revisiones de «Decorator»

(Como usarlo)
Línea 1: Línea 1:
{{Normalizar|motivo=}}
 
 
{{Definición
 
{{Definición
 
|nombre=Decorator
 
|nombre=Decorator
Línea 38: Línea 37:
 
==Fuentes==
 
==Fuentes==
 
   
 
   
*[http://es.wikipedia.org/wiki/Decorator_(patrón_de_diseño) wikipedia.org]
+
*[http://es.wikipedia.org/wiki/Decorator_(patrón_de_diseño) Wikipedia]
*[http://wiki.python.org/moin/PythonDecorators wiki.python.org]
+
*[http://wiki.python.org/moin/PythonDecorators Python Decorators ]
*[http://sourcemaking.com/design_patterns/decorator sourcemaking.com]
+
*[http://sourcemaking.com/design_patterns/decorator Decorator]
 
[[Category: Informática]][[Category:Programación]]
 
[[Category: Informática]][[Category:Programación]]

Revisión del 16:07 1 mar 2012

Decorator
Información sobre la plantilla
UMLClassDiagram02.gif
Concepto:Responde a la necesidad de añadir dinámicamente funcionalidad a un Objeto.

Decorator. El patrón Decorator añade responsabilidades adicionales a un objeto dinámicamente, proporcionando una alternativa flexible a la especialización mediante herencia, cuando se trata de añadir funcionalidades.

Se usa

  • Cuando se quiere añadir responsabilidades a un objeto de manera dinámica y transparente (independientemente de otros objetos).
  • Cuando es imposible la extensión de funcionalidad por herencia, por ser aquella imprevisible en tipo y número.

Ventajas

  • Aporta una mayor flexibilidad que la herencia estática, permitiendo, entre otras cosas, añadir una funcionalidad dos o más veces.
  • Evita concentrar en lo alto de la jerarquía clases guiadas por las responsabilidades, es decir, que pretenden (en vano) satisfacer todas las posibilidades. De esta forma las nuevas funcionalidades se componen de piezas simples que se crean y se combinan con facilidad, independientemente de los objetos cuyo comportamiento extienden.

Inconvenientes

  • La transparencia tiene el inconveniente de que, a pesar de ser diferentes por muchos motivos, un decorador y un componente son indistinguibles, por lo que no se puede confiar en la identidad de los objetos.
  • Gran fragmentación; el sistema se llena de gran cantidad de objetos pequeños, lo cual puede dificultar el aprendizaje de su funcionamiento y su depuración, aunque el que lo domine puede adaptarlo fácilmente.

Relacionado con

  • Adaptador cambia la interfaz de un objeto (ocasionalmente puede tener que añadir alguna funcionalidad) mientras que Decorador centra su atención en ampliar las responsabilidades de un objeto, sin tocar su interfaz.
  • Decorador puede ser visto como una degeneración de Composición con un sólo componente, que además extiende funcionalidades.
  • Decorador permite cambiar la piel de un objeto, mientras que Estrategia cambia sus entrañas. Esto hace que frente a la TRANSPARENCIA que da Decorador respecto a los componentes, Estrategia presenta una interfaz propia e independiente, que no tiene porque amoldarse a la de los componentes.

Otros aspectos de interés

  • Componente debe permanecer lo más ligera posible, definiendo una interfaz genérica y simple, para no arrastrar hacia complejidades innecesarias a Componentes Concretos y Decoradores.
  • Un Decorador puede convertirse en una solución muy costosa si los componentes son, por naturaleza, muy complejos. En esos casos es preferible Estrategia.
  • Puede resultar problemático especializar mediante herencia los Componentes Concretos, por culpa de la coherencia que el Decorador debe guardar, en cuanto a interfaz se refiere, con la clase base (“Componente”).

Fuentes