Sobes.tech
Junior — Middle

Tudja magyarázni az Dekorátor mintázat fogalmát és alkalmazását az objektumorientált programozásban?

sobes.tech MI

Válasz az MI-től

A Decorátor minta lehetővé teszi, hogy dinamikusan adjunk hozzá új felelősségeket az objektumokhoz, más dekorátor objektumokba csomagolva őket, anélkül, hogy módosítanánk az osztály forráskódját. Ez különösen hasznos, amikor a funkcionalitást öröklés nélkül szeretnénk bővíteni.

Példa: van egy alap Ital interfész a költség() metódussal. Létrehozhatunk egy Kávé osztályt, majd dekorátorokat Tejjel, Cukorral, amelyek növelik a költséget és megváltoztatják a viselkedést.

interface Ital {
    double költség();
}

class Kávé implements Ital {
    public double költség() { return 5.0; }
}

class TejDekorátor implements Ital {
    private Ital ital;
    public TejDekorátor(Ital ital) { this.ital = ital; }
    public double költség() { return ital.költség() + 1.0; }
}

// Használat
Ital kávé = new Kávé();
Ital kávéTejjel = new TejDekorátor(kávé);
System.out.println(kávéTejjel.költség()); // 6.0

Így rugalmasan lehet kombinálni a funkcionalitást anélkül, hogy sok alosztályt kellene létrehozni.