Sobes.tech
Назад к вопросам
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

Таким образом, декораторы позволяют добавлять функциональность объектам на лету, не меняя их исходный код.