¿En qué se diferencia el patrón Decorator del GoF de la herencia para añadir comportamiento?
Opciones
- Es idéntico a la herencia en cómo añade comportamiento nuevo
- Envuelve un objeto con la misma interface, así que los comportamientos se apilan (Opción correcta)
- Requiere herencia múltiple para combinar los comportamientos
- Modifica la clase original directamente al compilar
Respuesta
Envuelve un objeto con la misma interface en tiempo de ejecución, así que los comportamientos se pueden apilar de forma dinámica
Por qué
El patrón Decorator envuelve un objeto en otro que tiene la MISMA interface y añade un comportamiento extra (logging, caché, reintentos).
Como los wrappers parecen idénticos desde fuera, puedes apilarlos en cualquier combinación en ejecución: Cached(Logged(SqlRepo())).
Con herencia necesitarías una subclase por cada combinación.
Recuerda
Patrón Decorator = envolver y añadir, con la misma interface.