Patrón Decorator
¿Qué es el Patrón Decorator?
El Decorator es un patrón de diseño estructural que permite añadir funcionalidades a un objeto de manera dinámica, sin alterar su clase. Es útil para extender el comportamiento de los objetos sin recurrir a la herencia.
Código de Ejemplo en JavaScript
class Coffee {
cost() {
return 5;
}
description() {
return "Café";
}
}
class MilkDecorator {
constructor(coffee) {
this.decoratedCoffee = coffee;
}
cost() {
return this.decoratedCoffee.cost() + 2;
}
description() {
return this.decoratedCoffee.description() + ", con leche";
}
}
class SugarDecorator {
constructor(coffee) {
this.decoratedCoffee = coffee;
}
cost() {
return this.decoratedCoffee.cost() + 1;
}
description() {
return this.decoratedCoffee.description() + ", con azúcar";
}
}
// Uso del Patrón Decorator
let coffee = new Coffee();
console.log(coffee.description() + " cuesta $" + coffee.cost());
coffee = new MilkDecorator(coffee);
console.log(coffee.description() + " cuesta $" + coffee.cost());
coffee = new SugarDecorator(coffee);
console.log(coffee.description() + " cuesta $" + coffee.cost());
Casos de Uso
- Añadir funcionalidades a componentes gráficos como botones o ventanas.
- Extender el comportamiento de objetos en tiempo de ejecución sin modificar su estructura.
- Aplicar configuraciones adicionales a instancias existentes de clases.
Patrones Relacionados
- Composite: Trabaja con jerarquías, mientras que Decorator añade funcionalidad.
- Adapter: Convierte interfaces incompatibles, pero no añade funcionalidad.
- Proxy: Controla el acceso al objeto, mientras que Decorator lo extiende.