Введение
Модель проектирования в разработке программного обеспечения
В разработке программного обеспечения, композитная модель — это модель проектирования, относящаяся к разделению на составные части. Композитная модель описывает группу объектов, которые обрабатываются так же, как и отдельный экземпляр объекта того же типа. Назначение композитной модели заключается в "компоновке" объектов в древовидные структуры для представления иерархий "часть-целое". Реализация композитной модели позволяет клиентам единообразно работать как с отдельными объектами, так и с композициями.
In software engineering, the composite pattern is a partitioning design pattern. The composite pattern describes a group of objects that are treated the same way as a single instance of the same type of object. The intent of a composite is to "compose" objects into tree structures to represent part whole hierarchies. Implementing the composite pattern lets clients treat individual objects and compositions uniformly.
Какие проблемы может решить композитный дизайн?
Иерархия "часть-целое" должна быть представлена таким образом, чтобы клиенты могли единообразно работать как с частями, так и с целыми объектами. Иерархия "часть-целое" должна быть представлена в виде древовидной структуры. Однако, при определении (1) объектов-частей и (2) объектов-целых, выступающих в качестве контейнеров для объектов-частей, клиенты вынуждены рассматривать их по-разному, что усложняет клиентский код.
Мотивация
При работе со структурированными данными в виде дерева, программистам часто приходится различать конечный узел и ветвь. Это усложняет код и, следовательно, повышает вероятность ошибок. Решение заключается в использовании интерфейса, позволяющего единообразно обрабатывать как сложные, так и простые объекты. В объектно-ориентированном программировании композит – это объект, спроектированный как состав одной или нескольких схожих объектов, обладающих одинаковой функциональностью. Это известно как отношение "часть-целое" между объектами. Ключевая идея заключается в том, что можно манипулировать отдельным экземпляром объекта так же, как и группой экземпляров. Операции, которые можно выполнять над всеми составными объектами, часто имеют общий базовый функционал. Например, при разработке системы для отображения сгруппированных фигур на экране, было бы полезно определить изменение размера группы фигур таким образом, чтобы оно оказывало аналогичный эффект (в определенном смысле) изменению размера отдельной фигуры.
Изменение
Как описано в книге «Паттерны проектирования», этот шаблон также подразумевает включение методов управления дочерними элементами в основной интерфейс компонента, а не только в подкласс Composite. В более современных описаниях эти методы иногда опускают.