Назад к вопросам
Junior — Middle
69
Можете объяснить концепцию шаблона Decorator и в каких случаях его применяют?
Ответ от нейросети
sobes.tech AI
Шаблон Decorator позволяет динамически добавлять объектам новые обязанности, оборачивая их в другие объекты-декораторы, не изменяя исходный класс. Это полезно, когда нужно расширить функциональность объекта без создания множества подклассов.
Пример использования:
- Есть базовый интерфейс или класс.
- Создаются декораторы, которые реализуют тот же интерфейс и содержат ссылку на объект этого интерфейса.
- Вызовы методов передаются вложенному объекту, при этом декоратор может добавить дополнительное поведение до или после вызова.
Пример на Java:
interface Coffee {
String getDescription();
double getCost();
}
class SimpleCoffee implements Coffee {
public String getDescription() { return "Simple coffee"; }
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() + ", milk"; }
public double getCost() { return coffee.getCost() + 0.5; }
}
// Использование
Coffee coffee = new MilkDecorator(new SimpleCoffee());
System.out.println(coffee.getDescription()); // Simple coffee, milk
System.out.println(coffee.getCost()); // 1.5
Применяют, когда нужно гибко расширять поведение объектов без изменения их кода и без создания большого количества подклассов.