Junior — Middle
Môžete vysvetliť koncept a použitie vzoru Dekorátor v objektovo orientovanom programovaní?
sobes.tech AI
Odpoveď od AI
Vzor Decorátor umožňuje dynamicky pridávať objektom nové zodpovednosti tým, že ich obalí do iných dekorátorových objektov, bez zmeny zdrojového kódu triedy. To je obzvlášť užitočné, keď je potrebné rozšíriť funkcionalitu bez dedičnosti.
Príklad: existuje základné rozhranie Nápoj s metódou cena(). Môžete vytvoriť triedu Káva a potom dekorátory S Mliekom, S Cukrom, ktoré pridávajú k cene a menia správanie.
interface Nápoj {
double cena();
}
class Káva implements Nápoj {
public double cena() { return 5.0; }
}
class DekorátorMlieka implements Nápoj {
private Nápoj nápoj;
public DekorátorMlieka(Nápoj nápoj) { this.nápoj = nápoj; }
public double cena() { return nápoj.cena() + 1.0; }
}
// Použitie
Nápoj káva = new Káva();
Nápoj kávaSMliekom = new DekorátorMlieka(káva);
System.out.println(kávaSMliekom.cena()); // 6.0
Týmto spôsobom je možné flexibilne kombinovať funkcionalitu bez vytvárania veľkého počtu podtried.