El patrón Decorator permite añadir dinámicamente nuevas responsabilidades a un objeto. Se crea una clase abstracta Decorador que mantiene una referencia al objeto que se desea extender y hereda de ella clases concretas que implementan las nuevas responsabilidades. De esta forma se puede combinar funcionalidad de forma flexible sin necesidad de crear subclases para cada posible combinación.