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
Овим приступом, можете флексибилно комбиновати функционалност без креирања великог броја подкласа.