Назад к вопросам
IT One
Junior — Middle
63
Объясните принцип работы и назначение шаблона проектирования 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
Таким образом, Decorator позволяет гибко расширять функциональность объектов без изменения их кода.