Junior — Middle
Můžete vysvětlit koncept a použití vzoru Dekorátor v objektově orientovaném programování?
sobes.tech AI
Odpověď od AI
Vzor Decorátor umožňuje dynamicky přidávat objektem nové odpovědnosti tím, že je obaluje do jiných dekorátorových objektů, aniž by se měnil zdrojový kód třídy. To je obzvlášť užitečné, když je třeba rozšířit funkčnost bez dědičnosti.
Příklad: existuje základní rozhraní Nápoj s metodou cena(). Můžete vytvořit třídu Káva a poté dekorátory S Mlékem, S Cukrem, které přidávají k ceně a mění chování.
interface Nápoj {
double cena();
}
class Káva implements Nápoj {
public double cena() { return 5.0; }
}
class DekorátorMléka implements Nápoj {
private Nápoj nápoj;
public DekorátorMléka(Nápoj nápoj) { this.nápoj = nápoj; }
public double cena() { return nápoj.cena() + 1.0; }
}
// Použití
Nápoj káva = new Káva();
Nápoj kávaSMlékem = new DekorátorMléka(káva);
System.out.println(kávaSMlékem.cena()); // 6.0
Tímto způsobem lze funkčnost flexibilně kombinovat bez vytváření mnoha podtříd.