Sobes.tech
Назад к вопросам
Junior — Middle
63

Объясните принцип работы и назначение шаблона проектирования Decorator

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

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 позволяет гибко расширять функциональность объектов без изменения их кода.