Sto cercando di insegnarmi alcuni schemi di progettazione utilizzando un libro che mi è stato consigliato, Modelli di primo modello di testa . Sono arrivato al capitolo sul pattern Decorator, e anche se capisco lo scopo, sono un po 'confuso sul suo layout.
Ecco il loro UML di base del pattern Decorator: Imgur (Ci scusiamo per il collegamento, ma SE non mi permetterà di caricare una foto qui per qualche motivo)
Ecco come hanno scritto il codice:
public abstract class Component {
String description = "Unknown Description";
public String getDescription() {
return description;
}
public abstract double cost();
}
public class ConcreteComponent extends Component {
public ConcreteComponent() {
description = "I am a concrete component";
}
public double cost() {
return 1.99;
}
}
public abstract class Decorator extends Component {
public abstract String getDescription();
}
public class ConcreteDecorator extends Decorator {
Component component;
public ConcreteDecorator(Component component) {
this.component = component;
}
public String getDescription() {
return component.getDescription() + " with a decorator";
}
public double cost() {
return .20 + component.cost();
}
}
La mia domanda è, qual è la necessità di un corso di Decorator in questa situazione? Perché non lasciare getDescription () astratto e lasciare che ConcreteComponents e ConcreteDecorators lo implementino nel modo in cui hanno bisogno?
Come follow-up, ci sono benefici effettivi nella creazione di una classe Decorator? Questo esempio non sembra coprire il motivo per cui è utile o come potrebbe essere utile.