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