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

Применяют, когда нужно гибко расширять поведение объектов без изменения их кода и без создания большого количества подклассов.