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

Объясните, что представляет собой паттерн 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 SimpleCoffee();
coffee = new MilkDecorator(coffee);
System.out.println(coffee.getDescription()); // Simple coffee, milk
System.out.println(coffee.getCost()); // 1.5

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