Repaso
English

¿En qué se diferencia el patrón Decorator del GoF de la herencia para añadir comportamiento?

Opciones

  1. Es idéntico a la herencia en cómo añade comportamiento nuevo
  2. Envuelve un objeto con la misma interface, así que los comportamientos se apilan (Opción correcta)
  3. Requiere herencia múltiple para combinar los comportamientos
  4. 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.

Términos clave

Practica esta pregunta en Repaso