Sobes.tech
Junior — Middle
115

Decorator дизайн үлгүсүнүн иштөө принциби жана максаты жөнүндө түшүндүрүңүз

Кайсыл жерде компаниялар сурады
IT OneIT One

AIден жооп

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