Junior — Middle
Czy możesz wyjaśnić koncepcję i zastosowanie wzorca Dekorator w programowaniu obiektowym?
sobes.tech AI
Odpowiedź od AI
Wzorzec Dekorator pozwala na dynamiczne dodawanie nowych obowiązków obiektom, opakowując je w inne obiekty dekorujące, bez zmiany kodu źródłowego klasy. Jest to szczególnie przydatne, gdy trzeba rozszerzyć funkcjonalność bez dziedziczenia.
Przykład: istnieje podstawowy interfejs Napój z metodą koszt(). Można utworzyć klasę Kawa, a następnie dekoratory ZMlekiem, ZCukrem, które dodają koszt i zmieniają zachowanie.
interface Napój {
double koszt();
}
class Kawa implements Napój {
public double koszt() { return 5.0; }
}
class DekoratorMleka implements Napój {
private Napój napój;
public DekoratorMleka(Napój napój) { this.napój = napój; }
public double koszt() { return napój.koszt() + 1.0; }
}
// Użycie
Napój kawa = new Kawa();
Napój kawaZMlekiem = new DekoratorMleka(kawa);
System.out.println(kawaZMlekiem.koszt()); // 6.0
W ten sposób można elastycznie łączyć funkcjonalności bez tworzenia wielu podklas.