Структурные шаблоны
Структурные шаблоны помогают проектировать связи между классами и объектами так, чтобы система оставалась расширяемой, понятной и устойчивой к изменениям.
Основная идея этой группы - упростить композицию: как объединять части в целое, как подменять реализации и как добавлять поведение без лишнего усложнения.
Какие шаблоны входят в группу
- Адаптер: согласует несовместимые интерфейсы.
- Мост: разделяет абстракцию и реализацию, чтобы развивать их независимо.
- Компоновщик: строит древовидные структуры из простых и составных объектов.
- Декоратор: динамически добавляет объекту новые обязанности.
- Фасад: предоставляет единый упрощенный интерфейс к подсистеме.
- Легковес: экономит память за счет совместного использования мелких объектов.
- Private Class Data: ограничивает доступ к внутренним данным объекта.
- Прокси: предоставляет объект-заместитель для контроля доступа к другому объекту.
Когда использовать структурные шаблоны
- Когда система растет и связи между компонентами становятся слишком жесткими.
- Когда нужно заменить реализацию, не меняя клиентский код.
- Когда требуется добавлять функциональность объектам без разрастания иерархий наследования.
- Когда важно упростить работу с большой или сложной подсистемой.
Практические ориентиры
Adapterчаще применяется постфактум, чтобы совместить уже существующие интерфейсы;Bridgeпроектируется заранее.Adapterменяет интерфейс,Proxyобычно сохраняет его,Decoratorрасширяет поведение.CompositeиDecoratorпохожи по структуре (рекурсивная композиция), но решают разные задачи и часто используются вместе.DecoratorиProxyсхожи по реализации (делегирование), но различаются по намерению.Facadeсоздает новый упрощенный интерфейс к подсистеме, в отличие отAdapter, который согласует существующие.Flyweightполезен при большом количестве мелких объектов и может комбинироваться сComposite.
Источник
Материал страницы основан на обзоре SourceMaking: