декоратор:
- Добавить поведение к объекту во время выполнения . Наследование является ключом для достижения этой функциональности, что является как преимуществом, так и недостатком этого шаблона.
- Улучшает поведение интерфейса.
- Декоратор можно рассматривать как вырожденный композит с одним компонентом. Однако декоратор добавляет дополнительные обязанности - он не предназначен для агрегирования объектов.
- Декоратор поддерживает рекурсивную композицию
- Класс Decorator объявляет композиционные отношения с интерфейсом LCD (самый низкий знаменатель класса), и этот элемент данных инициализируется в своем конструкторе.
- Декоратор позволяет добавлять обязанности к объектам без подклассов
Подробнее см. В статье sourcemaking .
UML-схема декоратора из википедии :
Схема моста:
- Мост структурный рисунок
- Абстракция и реализация не связаны во время компиляции
- Абстракция и реализация - оба могут изменяться без влияния на клиента
Использовать шаблон Мост, когда:
- Вы хотите привязку реализации во время выполнения,
- у вас есть множество классов, возникающих в результате связанного интерфейса и многочисленных реализаций,
- вы хотите поделиться реализацией между несколькими объектами,
вам нужно отобразить ортогональные иерархии классов.
UML-схема моста из википедии :
Из диаграммы UML вы можете наблюдать разницу:
В шаблоне Decorator Decorator реализует Компонент, который будет заменен ConcreteComponent во время выполнения .
В паттерне Bridge RedefinedAbstraction не реализует инструмент реализации. Вместо этого он использует композицию, так что Implementor может динамически изменяться во время выполнения без ведома клиента.
Декоратор не может отделить абстракцию от реализации в отличие от шаблона Bridge.
Еще несколько полезных постов:
Когда использовать шаблон декоратора?
Когда вы используете шаблон моста? Чем он отличается от шаблона адаптера?