Composite (Компоновщик): древовидные структуры под единым интерфейсом
Composite позволяет представить древовидную структуру объектов так, как если бы она была единым объектом. Клиент обращается к дереву через общий интерфейс, не различая листья и составные элементы.
Паттерн идеально подходит для меню, каталогов, файловых систем, оргструктур, моделей документов, иерархий ролей, графов и других структур, где элементы включают подэлементы.
Composite делает архитектуру унифицированной: один интерфейс — множество типов элементов. Это упрощает обработку структур, повышает расширяемость и делает дерево управляемым и формальным.
Composite — один из фундаментальных архитектурных паттернов, который используется везде, где нужно работать с иерархиями. В традиционных ИС таких иерархий десятки: каталоги товаров, оргструктура предприятия, дерево навигации сайта, структура документов, вложенные финансовые операции, процессы в BPM, XML/JSON-документы, графы зависимостей. Паттерн позволяет представить их единым образом и работать с ними одинаково независимо от глубины и содержания.
Главная идея Composite
Все элементы дерева реализуют один и тот же интерфейс:
-
Leaf (лист) — элемент без дочерних узлов;
-
Composite (узел) — элемент, содержащий другие элементы.
Клиенту не нужно различать, с кем он работает — с листом или узлом.
Он вызывает одинаковые операции, а объект сам решает, как их выполнять.
Это даёт:
-
единообразие работы с разнородными объектами;
-
универсальность обработки структур;
-
независимость алгоритмов от формы структуры.
Где используется Composite в архитектуре
1. Меню и структуры навигации
Все меню (веб, мобильное, десктопное) — это Composite:
-
меню
-
раздел
-
пункт
-
пункт
-
-
раздел
-
подпункт
-
-
UI-фреймворки массово применяют этот паттерн.
2. Каталоги товаров и иерархии классификаторов
Например:
-
Строительство
-
Отделочные материалы
-
Краски
-
Шпатлевка
-
-
Инструменты
-
Электроинструменты
-
-
Работа с этими деревьями требует универсального интерфейса.
3. Файловые системы
Классический пример:
-
Folder
-
File
-
Folder
-
File
-
-
Обе сущности реализуют общий интерфейс FileSystemNode.
4. Организационные структуры
Оргструктура предприятия — яркий Composite:
-
Директор
-
Руководитель отдела
-
Сотрудник
-
Сотрудник
-
-
Руководитель филиала
-
Сотрудник
-
-
Используется в кадровых системах, CRM, ERP.
5. Модели документов (XML, JSON, DOM)
DOM-модель — это чистый Composite:
-
Element
-
Element
-
Text
-
-
Comment
-
С этим работают браузеры, парсеры и интеграционные решения.
6. BPM / Workflow / State Machines
Шаг процесса может включать:
-
один шаг;
-
группу шагов;
-
параллельные узлы;
-
под-процессы.
Это Composite.
7. AST (дерево разбора) и интерпретаторы
Все компиляторы используют Composite:
-
Program
-
Statement
-
Expression
-
Literal
-
-
Почему архитектор обязан знать Composite
Потому что большинство бизнес-структур — древовидные.
Если такие структуры не формализованы, система быстро превращается в хаос.
Composite дает:
-
единый интерфейс для всех элементов дерева;
-
чистую архитектуру;
-
универсальные алгоритмы обхода;
-
простоту расширения (только добавьте новый тип узла);
-
возможность строить сложные структуры без изменения кода клиентов.
Преимущества Composite
-
единый API для всего дерева;
-
гибкость структуры;
-
лёгкость добавления новых типов элементов;
-
простота обработки больших объектов;
-
совместимость с паттернами Visitor, Iterator, Factory.
Недостатки
-
сложность контроля допустимых комбинаций узлов;
-
может привести к слишком универсальному интерфейсу;
-
иногда требует механизмов защиты (ограничение добавления дочерних элементов).
Но в корпоративных ИС Composite используется очень часто.