Junior — Middle
Можете ли да обясните концепцията и приложението на патърна Декоратор в обектно-ориентираното програмиране?
sobes.tech AI
Отговор от AI
Моделът Decorator позволява динамично добавяне на нови отговорности към обекти, като ги обвива в други декоратор обекти, без да променя изходния код на класа. Това е особено полезно, когато трябва да разширите функционалността без наследяване.
Пример: има базов интерфейс Напитка с метода стойност(). Можете да създадете клас Кафе, а след това декоратори СМляко, СЗахар, които добавят стойност и променят поведението.
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
По този начин, можете гъвкаво да комбинирате функционалността без създаване на множество подкласове.