Back to questions
Axenix
Junior — Middle
93
Можете объяснить концепцию и применение паттерна Декоратор в объектно-ориентированном программировании?
Companies where asked
Answer from AI
sobes.tech AI
Паттерн Декоратор позволяет динамически добавлять объектам новые обязанности, оборачивая их в другие объекты-декораторы, не изменяя исходный код класса. Это особенно полезно, когда нужно расширить функциональность без наследования.
Пример: есть базовый интерфейс Напиток с методом стоимость(). Можно создать класс Кофе, а затем декораторы СМолоком, ССахаром, которые добавляют стоимость и изменяют поведение.
interface Beverage {
double cost();
}
class Coffee implements Beverage {
public double cost() { return 5.0; }
}
class MilkDecorator implements Beverage {
private Beverage beverage;
public MilkDecorator(Beverage beverage) { this.beverage = beverage; }
public double cost() { return beverage.cost() + 1.0; }
}
// Использование
Beverage coffee = new Coffee();
Beverage coffeeWithMilk = new MilkDecorator(coffee);
System.out.println(coffeeWithMilk.cost()); // 6.0
Таким образом, можно гибко комбинировать функциональность без создания множества подклассов.