Está en la página 1de 2

PATRÓN DECORATOR

El patrón Decorator responde a la necesidad de añadir dinámicamente funcionalidad a un


Objeto. Esto nos permite no tener que crear sucesivas clases que hereden de la primera
incorporando la nueva funcionalidad, sino otras que la implementan y se asocian a la primera.

INTENCIÓN
Extender la funcionalidad de un objeto en forma dinámica, proporcionando una alternativa
flexible a la creación de subclases.

TAMBIÉN CONOCIDO COMO


Wrapper(Envoltorio).

APLICABILIDAD
 Se utiliza este patrón cuando se necesita añadir responsabilidades a objetos individuales
dinámica y transparente, es decir, sin afectar a otros objetos.
 Se necesita retirar responsabilidades de algunos objetos.
 La extensión por subclases es poco práctica. Por ejemplo, un gran número de
extensiones independientes son posibles y produciría una explosión de subclases por
cada combinación. También cuando la definición de clase puede estar oculta o no
disponible para subclases.

ESTRUCTURA
PARTICIPANTES
 Component: define una interfaz para los objetos a extender en forma dinámica.
 ConcreteComponent: define un objeto al cual se le puede extender con
responsabilidades adicionales.
 Decorator: mantiene una referencia a un objeto componente y define una interfaz que
se ajusta a la interfaz de componente.
 ConcreteDecorator: agrega responsabilidades al componente.

COLABORACIONES
ConcreteDecorator-Component: el primero reenvía solicitudes a su objeto Component.
Opcionalmente puede realizar operaciones adicionales antes y después de remitir la solicitud.

IMPLEMENTACIÓN
La interfaz de un objeto decorador debe ajustarse a la interfaz del componente que decora (por
herencia). Omitiendo la clase Decorador abstracta. No hay necesidad de definir una clase
Decorador abstracta cuando sólo tiene que añadir una responsabilidad.

VENTAJAS
 Mayor flexibilidad que la herencia estática. Con decoradores, las responsabilidades se
pueden agregar y quitar en tiempo de ejecución con sólo conectar y desconectar ellos.
Por el contrario, la herencia requiere la creación de una nueva clase para cada
responsabilidad adicional.
 Evita las clases cargadas de características, ya que permite la adición de
responsabilidades. En lugar de tratar de soportar todas las características previsibles de
una clase compleja y personalizable, se puede definir una clase simple y agregar
funcionalidad incremental con objetos.
 Son fáciles de personalizar por aquellos que entienden su estructura.

DESVENTAJAS
 Un decorador y su componente no son idénticos. Un decorador actúa como una caja
transparente, pero desde el punto de vista de la identidad del objeto, un componente
decorado no es idéntico a la del propio componente.
 Un diseño que utiliza Decorator a menudo resulta en sistemas compuestos por gran
cantidad de pequeños objetos parecidos.
 Los objetos sólo se diferencian en la manera en que están interconectados. Esto puede
resultar difícil de aprender y depurar.

También podría gustarte