Как следует из названия, все дело в украшении твердого объекта.
Почему Decorator?
Давайте посмотрим на это на примере!

В игре мы создали класс Atom. У разных атомов разная степень движения. Скажите, например, : -
Atom 1, имеет только 1 градус движения - по оси x
Atom 2, имеет 2 градуса движения - по осям x и y
Atom 3, снова имеет 2 степени движения - по осям y и z.
Создание отдельного класса для этого было бы утомительной задачей. Например, : - MovableX, MovableXZ, MovableYZ… и т. Д.
Одна альтернатива - следовать шаблону декоратора. (Потому что меньше дублирования кода).
Создайте MovableX, MovableY, MovableZ, а затем используйте комбинации для динамического добавления дополнительной ответственности к отдельному атому.
E.g. :-
Для класса MovableXY мы могли бы создать это
IAtom atom_x_y = new MovableX( new MovableY( new Atom() ) )
Структура проекта:

Реализация на Java:
Еще один другой пример!
Возьмем, к примеру, вид из окна (сплошной объект). Допустим, нам нужно украсить Window новым свойством Прокрутка (дополнительная ответственность).
Количество возможных комбинаций (здесь подойдет комбинация, а не перестановка) → Горизонтально, Вертикально, Горизонтально _ & _ Вертикально.
Давайте посмотрим, как в этом случае можно использовать декоратор.
- Создайте Интерфейс (код для интерфейса, а не для реализации)
IWindow.java
2. Создайте твердый объект (реализация интерфейса).
BasicWindow.java
3. Создайте абстрактный прокручиваемый декоратор, который вмещает твердый объект.
ScrollDecorator.java
4. Создайте классы декоратора из Scroll-Decorator.
ПРИМЕЧАНИЕ:
- объект window присутствует в классе Abstract.
- Логика прокрутки может быть включена в render ().
VerticalScrollDecorator.java
HorizontalScrollDecorator.java
5. Программа драйвера
DecoratorDriver.java
- Используется IWindow, а не какой-либо конкретный класс.
- Обратите внимание на порядок вызова конструкторов.
Это было интересно?
Пожалуйста, покажите свою поддержку 👏. Чтобы прочитать полную серию, нажмите ниже.
Ссылка:
Отказ от ответственности:
Я сам только начал изучать шаблоны проектирования. Если вы обнаружите какие-либо проблемы, не стесняйтесь размещать их в разделе комментариев ниже. Спасибо, что дочитали до сих пор 😄