Что такое шаблон проектирования декоратора?
Шаблон проектирования Decorator позволяет нам динамически добавлять новые функции к существующему объекту, не изменяя и не модифицируя его структуру, и этот шаблон проектирования действует как оболочка для существующего класса.
Декоратор — это объект, который добавляет функции к другому объекту.
Диаграмма классов шаблона проектирования декоратора:
Как показано на предыдущей диаграмме, в шаблоне проектирования Decorator участвуют четыре компонента. Они следующие:
Компонент:
это интерфейс, который содержит элементы, которые будут реализованы конкретными классами компонентов и классами декораторов.
ConcreteComponent:
Это будет конкретный класс, который будет реализовывать компонент.
Декоратор:
это абстрактный класс. Этот класс реализует компонент и содержит ссылку на экземпляр компонента. Этот класс также действует как базовый класс для всех декораторов. Декоратор, по сути, оборачивает компонент.
ConcreteDecoratorA / ConcreteDecoratorB:
это конкретные классы, производные от декоратора. Эти классы добавляют дополнительные обязанности исходному компоненту.
Понимание шаблона проектирования Decorator на примере:
Предположим, нам нужно создать приложение для автосалона, продающего автомобили вместе с автоаксессуарами. Mercedes и BMW поставляются с дополнительными пакетами аксессуаров Basic и Sport. Таким образом, приложение должно предоставить стоимость автомобиля, добавляя стоимость пакета аксессуаров, если пользователь выбирает любой из предыдущих пакетов.
Например, стоимость автомобиля BMW составляет 5000, но если пользователь решит взять основные аксессуары, стоимость будет 5500, а если он решит взять спортивные аксессуары, стоимость будет 6500.
Диаграмма классов в зависимости от нашего примера будет выглядеть следующим образом:
Выполнение :
Преимущества шаблона декоратора:
1-Добавляет функциональность к существующим объектам динамически
2-Альтернатива подклассам
3-гибкий дизайн
4-поддерживает открытый закрытый принцип
Ссылка на полный код на Github:
Шаблоны проектирования/3-DecoratorDP
Полный репозиторий шаблонов проектирования на Github
В этом репозитории вы найдете все сводки шаблонов проектирования, которые я сделал, а также ссылки, от которых я завишу.