Sobes.tech
Back to questions
Junior — Middle
93

Можете объяснить концепцию и применение паттерна Декоратор в объектно-ориентированном программировании?

Companies where asked
AxenixAxenix

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

Таким образом, можно гибко комбинировать функциональность без создания множества подклассов.