Введение

Модель проектирования в разработке программного обеспечения
В разработке программного обеспечения, композитная модель — это модель проектирования, относящаяся к разделению на составные части. Композитная модель описывает группу объектов, которые обрабатываются так же, как и отдельный экземпляр объекта того же типа. Назначение композитной модели заключается в "компоновке" объектов в древовидные структуры для представления иерархий "часть-целое". Реализация композитной модели позволяет клиентам единообразно работать как с отдельными объектами, так и с композициями.

Какие проблемы может решить композитный дизайн?

Иерархия "часть-целое" должна быть представлена таким образом, чтобы клиенты могли единообразно работать как с частями, так и с целыми объектами. Иерархия "часть-целое" должна быть представлена в виде древовидной структуры. Однако, при определении (1) объектов-частей и (2) объектов-целых, выступающих в качестве контейнеров для объектов-частей, клиенты вынуждены рассматривать их по-разному, что усложняет клиентский код.

Мотивация

При работе со структурированными данными в виде дерева, программистам часто приходится различать конечный узел и ветвь. Это усложняет код и, следовательно, повышает вероятность ошибок. Решение заключается в использовании интерфейса, позволяющего единообразно обрабатывать как сложные, так и простые объекты. В объектно-ориентированном программировании композит – это объект, спроектированный как состав одной или нескольких схожих объектов, обладающих одинаковой функциональностью. Это известно как отношение "часть-целое" между объектами. Ключевая идея заключается в том, что можно манипулировать отдельным экземпляром объекта так же, как и группой экземпляров. Операции, которые можно выполнять над всеми составными объектами, часто имеют общий базовый функционал. Например, при разработке системы для отображения сгруппированных фигур на экране, было бы полезно определить изменение размера группы фигур таким образом, чтобы оно оказывало аналогичный эффект (в определенном смысле) изменению размера отдельной фигуры.

Изменение

Как описано в книге «Паттерны проектирования», этот шаблон также подразумевает включение методов управления дочерними элементами в основной интерфейс компонента, а не только в подкласс Composite. В более современных описаниях эти методы иногда опускают.