Decorator: Añadiendo Superpoderes
Añade comportamiento a objetos dinámicamente envolviéndolos — compón capacidades en lugar de crear una explosión de subclases.
Por qué importa
La herencia es la solución obvia cuando necesitas añadir comportamiento — hasta que necesitas combinaciones. Una cafetería con Espresso, Leche, Azúcar y Caramelo puede producir 16 combinaciones. La herencia te da 16 clases. Añadir Vainilla lo hace 32. El patrón Decorator escapa esta explosión: cada envoltorio implementa la misma interfaz y contiene una referencia a otra instancia de esa interfaz. Apila decoradores como piezas LEGO — combinaciones ilimitadas de un pequeño conjunto de partes.
En la práctica
El propio @functools.wraps de Python, los manejadores de logging y las pilas de middleware usan el patrón Decorator. Las capas de middleware de Django y FastAPI son decoradores. El patrón también es la base de la sintaxis @decorator de Python, aunque los decoradores de funciones son una variante más simple que envuelve callables en lugar de objetos.
💡Conclusión clave
Si estás creando subclases para cada combinación de características, usa Decorator. Prefiere la composición sobre la herencia — un puñado de decoradores desbloquea más combinaciones que cualquier jerarquía de clases.
🔧 Algunos ejercicios pueden tener errores. Si algo parece incorrecto, usa el botón Feedback (abajo a la derecha) para reportarlo — nos ayuda a corregirlo rápido.
Pista: Si estás creando subclases para cada combinación de características, usa Decorator. Prefiere la composición sobre la herencia.
✗ Tu versión