Decorator Pattern
El patrón decorador añade responsabilidades a un objeto dinámicamente sin cambiar su clase, apilando comportamiento mediante una cadena de wrappers como alternativa a la extensión por herencia.
Propósito
Superponer funcionalidad dinámicamente en tiempo de ejecución, extendiendo objetos con más flexibilidad que la herencia.
Mecanismo
Un decorador implementa la misma interfaz que el objetivo, mantiene una referencia a él y añade comportamiento antes/después de delegar las llamadas. Varios decoradores forman una cadena de envoltura. La familia InputStream de Java y el @decorator de Python son ejemplos típicos.
Casos de uso
- Superposición de funcionalidades
- Decoración de flujos de E/S
- Preocupaciones transversales