Sobes.tech
Junior — Middle

Можете ли да објасните концепт и примену патерна Декоратор у објектно оријентисаном програмирању?

sobes.tech АИ

Одговор од АИ

Модел декоратор омогућава динамичко додавање нових одговорности објектима, омотавајући их у друге декораторске објекте, без измене изворног кода класе. Ово је посебно корисно када желите проширити функционалност без наслеђивања.

Пример: постоји основни интерфејс Пиће са методом трошак(). Можете креирати класу Кафу, а затим декораторе СМлеком, СШећером, који додају трошак и мењају понашање.

interface Пиће {
    double трошак();
}

class Кафу implements Пиће {
    public double трошак() { return 5.0; }
}

class ДекораторМлека implements Пиће {
    private Пиће пиће;
    public ДекораторМлека(Пиће пиће) { this.пие = пиће; }
    public double трошак() { return пиће.трошак() + 1.0; }
}

// Коришћење
Пиће кафа = new Кафу();
Пиће кафаСМлеком = new ДекораторМлека(кафа);
System.out.println(кафаСМлеком.трошак()); // 6.0

Овим приступом, можете флексибилно комбиновати функционалност без креирања великог броја подкласа.