Documentos de Académico
Documentos de Profesional
Documentos de Cultura
sin tener que cambiar la fuente de la clase original o usar la herencia. Esto es
logrado mediante la creación de un contenedor de objetos denominado Decorador alrededor
el objeto real.
El objeto Decorator está diseñado para tener la misma interfaz que el objeto subyacente. Esto
permite que un objeto cliente interactúe con el objeto Decorator exactamente de la misma manera
que lo haría con el objeto real subyacente.
El objeto Decorador contiene una referencia al objeto real.
El objeto Decorador recibe todas las solicitudes (llamadas) de un cliente. A su vez, reenvía estas
llamadas al objeto subyacente.
El objeto Decorator agrega alguna funcionalidad adicional antes o después de reenviar solicitudes al
objeto subyacente. Esto asegura que la funcionalidad adicional se pueda agregar a un objeto dado
externamente en tiempo de ejecución sin modificar su estructura.
LoggerFactory no se muestra en la Figura 19.1. Esto se debe a que no está directamente relacionado
con la discusión del ejemplo actual.
Supongamos que algunos de los clientes ahora necesitan registrar mensajes de nuevas formas más
allá de lo que ofrece la utilidad de registro de mensajes. Consideremos las siguientes dos pequeñas
características que a los clientes les gustaría tener:
No requiere subclases.
Requiere subclasificación.
Dinámica.
Estático.
Mas flexible.
Menos flexible.
Es posible tener diferentes objetos decoradores para un objeto dado simultáneamente. Un cliente
puede elegir qué capacidades desea enviando mensajes a un decorador apropiado.
Tener subclases para todas las combinaciones posibles de capacidades adicionales, que los clientes
esperan de una clase determinada, podría conducir a una proliferación de subclases.
Fácil de agregar cualquier combinación de capacidades. Incluso se puede agregar la misma capacidad
dos veces.
Difícil.