Junior — Middle
Ar galite paaiškinti Dekoratoriaus modelio koncepciją ir taikymą objektinio programavimo srityje?
sobes.tech AI
Atsakymas iš AI
Dekoratoriaus modelis leidžia dinamiškai pridėti naujų atsakomybių objektams, juos apvyniojant kitais dekoratoriaus objektais, nekeičiant klasės šaltinio kodo. Tai ypač naudinga, kai norima išplėsti funkcionalumą be paveldėjimo.
Pavyzdys: yra pagrindinis Gėrimas sąsaja su metodu kaina(). Galite sukurti klasę Kava, o tada dekoratorius SuPienu, SuCukrumi, kurie prideda kainą ir keičia elgseną.
interface Gėrimas {
double kaina();
}
class Kava implements Gėrimas {
public double kaina() { return 5.0; }
}
class DekoratorSuPienu implements Gėrimas {
private Gėrimas gėrimas;
public DekoratorSuPienu(Gėrimas gėrimas) { this.gėrimas = gėrimas; }
public double kaina() { return gėrimas.kaina() + 1.0; }
}
// Naudojimas
Gėrimas kava = new Kava();
Gėrimas suPienu = new DekoratorSuPienu(kava);
System.out.println(suPienu.kaina()); // 6.0
Šiuo būdu galima lankstiai derinti funkcionalumą, nesukuriant daugybės pogrupių.