Junior — Middle
Puoi spiegare il concetto e l'applicazione del pattern Decoratore nella programmazione orientata agli oggetti?
sobes.tech AI
Risposta dell'AI
Il pattern Decoratore consente di aggiungere dinamicamente nuove responsabilità agli oggetti, avvolgendoli in altri oggetti decoratori, senza modificare il codice sorgente della classe. Questo è particolarmente utile quando si desidera ampliare la funzionalità senza ereditarietà.
Esempio: esiste un'interfaccia di base Bevanda con il metodo costo(). È possibile creare una classe Caffè, e poi decoratori ConLatte, ConZucchero, che aggiungono al costo e modificano il comportamento.
interface Bevanda {
double costo();
}
class Caffe implements Bevanda {
public double costo() { return 5.0; }
}
class DecoratoreLatte implements Bevanda {
private Bevanda bevanda;
public DecoratoreLatte(Bevanda bevanda) { this.bevanda = bevanda; }
public double costo() { return bevanda.costo() + 1.0; }
}
// Uso
Bevanda caffe = new Caffe();
Bevanda caffeConLatte = new DecoratoreLatte(caffe);
System.out.println(caffeConLatte.costo()); // 6.0
In questo modo, è possibile combinare funzionalità in modo flessibile senza creare molte sottoclassi.