Паттерн Composite относится к структурным паттернам уровня объекта.
Паттерн Composite группирует схожие объекты в древовидные структуры.
Для построения дерева будут использоваться массивы, представляющие ветви дерева.
Требуется для реализации:
- Базовый абстрактный класс Component который предоставляет интерфейс, как для ветвей, так и для листьев дерева;
- Класс Composite, реализующий интерфейс Component и являющийся ветвью дерева;
- Класс Leaf, реализующий интерфейс Component и являющийся листом дерева.
Обратите внимание, что лист дерева является классом листовых узлов и не может иметь потомков (из листа не может вырасти ветвь или другой лист).
Ветви дерева задают поведение объектов, входящих в структуру дерева, у которых есть потомки, а также сами хранит в себе компоненты дерева. Другим словами ветви могут содержать другие ветви и листья.
Основным назначением паттерна, является обеспечение единого интерфейса как к составному (ветви) так и конечному (листу) объекту, что бы клиент не задумывался над тем, с каким объектом он работает.
[!] В описании паттерна применяются общие понятия, такие как Класс, Объект, Абстрактный класс. Применимо к языку Go, это Пользовательский Тип, Значение этого Типа и Интерфейс. Также в языке Go за место общепринятого наследования используется агрегирование и встраивание.