Skip to main content

Inicia sesión en CleanKata

Sigue tu progreso, gana XP y desbloquea todas las lecciones.

Al iniciar sesión aceptas nuestros Términos de uso y Política de privacidad.

Patrones de Diseño80 XP9 min

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

Decorator: Añadiendo Superpoderes — CleanKata — CleanKata