Назад к вопросам
Middle+
6
Расскажите про паттерн Decorator — как он работает?
Компании, где спрашивали
луция
Ответ от нейросети
sobes.tech AI
Паттерн Decorator (Декоратор) позволяет динамически добавлять объектам новые обязанности, оборачивая их в «обёртки» — декораторы, которые реализуют тот же интерфейс, что и исходный объект.
Как это работает:
- Есть базовый интерфейс или абстрактный класс.
- Конкретный объект реализует этот интерфейс.
- Декоратор содержит ссылку на объект того же интерфейса и реализует дополнительные функции, вызывая методы оборачиваемого объекта и дополняя их.
Это позволяет гибко расширять поведение объектов без изменения их кода и без создания большого количества подклассов.
Пример на Java:
interface Coffee {
String getDescription();
double getCost();
}
class SimpleCoffee implements Coffee {
public String getDescription() {
return "Простой кофе";
}
public double getCost() {
return 1.0;
}
}
class MilkDecorator implements Coffee {
private Coffee coffee;
public MilkDecorator(Coffee coffee) {
this.coffee = coffee;
}
public String getDescription() {
return coffee.getDescription() + ", с молоком";
}
public double getCost() {
return coffee.getCost() + 0.5;
}
}
// Использование:
Coffee coffee = new SimpleCoffee();
coffee = new MilkDecorator(coffee);
System.out.println(coffee.getDescription()); // Простой кофе, с молоком
System.out.println(coffee.getCost()); // 1.5
Таким образом, декораторы позволяют добавлять функциональность объектам на лету, не меняя их исходный код.