Composite — единый интерфейс для древовидных структур
Composite позволяет представить и работать с иерархией объектов так, будто это единичный объект. Листья и контейнеры имеют один интерфейс, что упрощает обход, модификацию и расширение структуры.
Паттерн применяется для представления файловых систем, организационных структур, UI-меню, документов, конфигурационных деревьев и объектов, имеющих вложения.
Composite снижает сложность работы со сложными деревьями и поддерживает рекурсивные операции.
Composite — один из тех паттернов, с которыми архитектор сталкивается постоянно, даже если не осознает этого. Любая система, содержащая иерархию, практически неизбежно использует Composite. Это делает паттерн универсальным и архитектурно критичным в большом количестве моделей, включая организационные структуры, каталоги, файлы, сценарии, конфигурации и дерево UI.
Главная идея Composite
Composite объединяет:
-
Leaf (лист — объект без дочерних элементов)
-
Composite (контейнер — объект, внутри которого есть другие элементы)
Всё это реализует единый интерфейс, позволяющий:
-
одинаково обходить листья и контейнеры;
-
применять рекурсивные операции;
-
унифицировать обработку любой глубины вложенности.
Клиенту не нужно знать тип элемента — это упрощает код и архитектуру.
Где Composite применяется в архитектуре
1. Файловые системы
Классический пример:
-
каталог — Composite
-
файл — Leaf
Оба имеют общий интерфейс:
получить размер, путь, удалить, переместить.
Система обхода директорий — это фактически обработка Composite.
2. Древовидные меню и UI-компоненты
Любое меню (веб, мобильное приложение, десктоп):
-
пункт меню — Leaf
-
меню с подпунктами — Composite
Точно так же построены системы UI:
-
компонент — Leaf
-
контейнер — Composite
React/Vue виртуальный DOM — по сути Composite-дерево.
3. Организационные структуры
Например:
-
сотрудник — Leaf
-
отдел — Composite
-
департамент — Composite
В бизнес-системах и ERP это встречается повсеместно.
4. Каталоги товаров и классификаторы
Категория → подкатегория → товар
в e-commerce, логистике, производстве, BI.
5. Документы и структуры контента
Например:
-
параграф — Leaf
-
раздел — Composite
-
глава — Composite
-
документ — Composite
Системы электронного документооборота, редакторы, CMS — всё это Composite.
6. Конфигурационные модели
Kubernetes манифесты, JSON/XML конфиги — это древовидные структуры.
Работа с ними через Composite позволяет:
-
обходить дерево настроек;
-
применять патчи;
-
валидировать вложенные структуры.
Преимущества Composite
-
упрощение работы с деревьями;
-
рекурсивные операции без сложной логики;
-
единый интерфейс для всех элементов;
-
возможность легко расширять функциональность;
-
гибкая и модульная архитектура.
Недостатки
-
иногда скрывает различия между листьями и контейнерами;
-
сложнее реализовать бизнес-логику, если сущности очень разные;
-
дерево может разрастись и усложнить управление памятью.
Архитектор должен заранее продумать глубину дерева и политику обхода.
Composite в учебниках
Composite рассматривается в темах:-
объектного моделирования;
-
структурного проектирования;
-
UI-компонентных моделей;
-
проектирования систем документооборота;
-
представления иерархий.
Очень часто этот паттерн описывается вместе с Visitor и Iterator.
Почему архитектор должен знать Composite
Потому что почти вся бизнес-информация — иерархическая.
Без Composite невозможно эффективно проектировать:
-
файловые структуры,
-
меню,
-
иерархии пользователей,
-
справочники и классификаторы,
-
UI-фреймворки,
-
структуры конфигурации,
-
сложные модели данных.
Composite — основа большинства моделей корпоративных систем.