Skip to main content

Структурные шаблоны

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

Основная идея этой группы - упростить композицию: как объединять части в целое, как подменять реализации и как добавлять поведение без лишнего усложнения.

Какие шаблоны входят в группу

  • Адаптер: согласует несовместимые интерфейсы.
  • Мост: разделяет абстракцию и реализацию, чтобы развивать их независимо.
  • Компоновщик: строит древовидные структуры из простых и составных объектов.
  • Декоратор: динамически добавляет объекту новые обязанности.
  • Фасад: предоставляет единый упрощенный интерфейс к подсистеме.
  • Легковес: экономит память за счет совместного использования мелких объектов.
  • Private Class Data: ограничивает доступ к внутренним данным объекта.
  • Прокси: предоставляет объект-заместитель для контроля доступа к другому объекту.

Когда использовать структурные шаблоны

  • Когда система растет и связи между компонентами становятся слишком жесткими.
  • Когда нужно заменить реализацию, не меняя клиентский код.
  • Когда требуется добавлять функциональность объектам без разрастания иерархий наследования.
  • Когда важно упростить работу с большой или сложной подсистемой.

Практические ориентиры

  1. Adapter чаще применяется постфактум, чтобы совместить уже существующие интерфейсы; Bridge проектируется заранее.
  2. Adapter меняет интерфейс, Proxy обычно сохраняет его, Decorator расширяет поведение.
  3. Composite и Decorator похожи по структуре (рекурсивная композиция), но решают разные задачи и часто используются вместе.
  4. Decorator и Proxy схожи по реализации (делегирование), но различаются по намерению.
  5. Facade создает новый упрощенный интерфейс к подсистеме, в отличие от Adapter, который согласует существующие.
  6. Flyweight полезен при большом количестве мелких объектов и может комбинироваться с Composite.

Источник

Материал страницы основан на обзоре SourceMaking: