Junior — Middle
Puteți explica conceptul și aplicarea pattern-ului Decorator în programarea orientată pe obiecte?
sobes.tech AI
Răspuns de la AI
Modelul Decorator permite adăugarea dinamică a noi responsabilități obiectelor, învelindu-le în alte obiecte decorator, fără a modifica codul sursă al clasei. Acest lucru este deosebit de util atunci când doriți să extindeți funcționalitatea fără moștenire.
Exemplu: există o interfață de bază Băutură cu metoda cost(). Puteți crea o clasă Cafea, apoi decoratori CuLapte, CuZahăr, care adaugă la cost și schimbă comportamentul.
interface Băutură {
double cost();
}
class Cafea implements Băutură {
public double cost() { return 5.0; }
}
class DecoratorLapte implements Băutură {
private Băutură băutură;
public DecoratorLapte(Băutură băutură) { this.băutură = băutură; }
public double cost() { return băutură.cost() + 1.0; }
}
// Utilizare
Băutură cafea = new Cafea();
Băutură cafeaCuLapte = new DecoratorLapte(cafea);
System.out.println(cafeaCuLapte.cost()); // 6.0
Astfel, puteți combina funcționalitatea în mod flexibil fără a crea multe subclase.