Обзор темы [Шаблоны проектирования]

Затем: МотивацияНазначение

Составляет объекты в древесные структуры, чтобы представить иерархию типа “часть – целое”. Этот шаблон позволяет клиенту обрабатывать индивидуальные объекты и объединения объектов единообразно.

Затем: СтруктураМотивация

Графические приложения подобные графическим редакторам и схематическим системам сбора данных позволяют пользователям формировать сложные диаграммы из простых компонентов. Пользователь может также группировать компоненты, чтобы формировать большие компоненты, которые в свою очередь могут быть сгруппированы, чтобы формировать все еще большие компоненты. Простая реализация могла бы определять классы для графических примитивов типа Text и String плюс другие классы, которые действуют как контейнеры для этих примитивов.

Но при таком подходе возникает проблема: Код, который используют эти классы, должен обработать примитив и объекты контейнера по-разному, даже если большинство времени пользователь обрабатывает их тождественно. Необходимость отличать эти объекты делает приложение более сложным. Составной шаблон описывает как использовать представление “часть-целое” так, чтобы клиент не различал эти структуры.

Ключ к Составному шаблону - абстрактный класс, который представляет оба примитива и их контейнеры. Для графической системы, это класс Graphic. Graphic объявляет такие операции как Draw, являющиеся специфическими для графических объектов. Он также объявляет операции, которые разделяют все составные части композиции, типа операций для доступа и управления его дочерними записями.

Подклассы String, Rectangle, и Text (см. предшествующую диаграмму классов) определяют примитивные графические объекты. Эти классы реализуют так, чтобы можно было рисовать строки, прямоугольники, и текст, соответственно. Так как примитивная графика не имеет никакой дочерней графики, ни один из этих подклассов не осуществляет дочерне-связанные операции.

Класс Picture определяет агрегат объектов Graphic. Picture определяет Draw, для того, чтобы он вызывал Draw у своих составных частей и т.д. Поскольку интерфейс Picture реализует интерфейс Graphic, объекты Picture могут объединять другие Picture рекурсивно.

Следующая диаграмма показывает типичную составную объектную структуру рекурсивно составленных объектов Graphic:

Затем: Составные частиСтруктура

Типичная структура объекта Composite могла бы выглядеть следующим образом:

Составные части