Sobes.tech
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.