Компоновщик. Что такое компоновщик?

Содержание

Слайд 2

Что такое компоновщик ?

Компоновщик (англ. Composite pattern) — структурный шаблон проектирования, объединяющий объекты в древовидную структуру для

Что такое компоновщик ? Компоновщик (англ. Composite pattern) — структурный шаблон проектирования,
представления иерархии от частного к целому. Компоновщик позволяет клиентам обращаться к отдельным объектам и к группам объектов одинаково.

Слайд 3

Образно реализацию паттерна можно представить в виде меню, которое имеет различные пункты.

Образно реализацию паттерна можно представить в виде меню, которое имеет различные пункты.
Эти пункты могут содержать подменю, в которых, в свою очередь, также имеются пункты. То есть пункт меню служит с одной стороны частью меню, а с другой стороны еще одним меню. В итоге мы однообразно можем работать как с пунктом меню, так и со всем меню в целом.

Слайд 4

Плюсы и минусы

Достоинства паттерна Composite
В систему легко добавлять новые примитивные или составные

Плюсы и минусы Достоинства паттерна Composite В систему легко добавлять новые примитивные
объекты, так как паттерн Composite использует общий базовый класс Component.
Код клиента имеет простую структуру – примитивные и составные объекты обрабатываются одинаковым образом.
Паттерн Composite позволяет легко обойти все узлы древовидной структуры
Недостатки паттерна Composite
Неудобно осуществить запрет на добавление в составной объект Composite объектов определенных типов. Так, например, в состав римской армии не могут входить боевые слоны.

Слайд 5

Когда использовать компоновщик?

Когда объекты должны быть реализованы в виде иерархической древовидной структуры
Когда

Когда использовать компоновщик? Когда объекты должны быть реализованы в виде иерархической древовидной
клиенты единообразно должны управлять как целыми объектами, так и их составными частями. То есть целое и его части должны реализовать один и тот же интерфейс
С помощью UML шаблон компоновщик можно представить следующим образом:

Слайд 6

Формальное определение паттерна на C# могло бы выглядеть так:

Формальное определение паттерна на C# могло бы выглядеть так:

Слайд 8

Участники

Component: определяет интерфейс для всех компонентов в древовидной структуре
Composite: представляет компонент, который

Участники Component: определяет интерфейс для всех компонентов в древовидной структуре Composite: представляет
может содержать другие компоненты и реализует механизм для их добавления и удаления
Leaf: представляет отдельный компонент, который не может содержать другие компоненты
Client: клиент, который использует компоненты

Слайд 9

Пример. Нужно создать объект файловой системы. Файловую систему составляют папки и файлы.

Пример. Нужно создать объект файловой системы. Файловую систему составляют папки и файлы.
Каждая папка также может включать в себя папки и файлы. То есть получается древовидная иерархическая структура, где с вложенными папками нам надо работать также, как и с папками, которые их содержат. Для реализации данной задачи и воспользуемся паттерном Компоновщик:

Слайд 11

В итоге подобная система обладает неплохой гибкостью: если мы захотим добавить новый

В итоге подобная система обладает неплохой гибкостью: если мы захотим добавить новый
вид компонентов, нам достаточно унаследовать новый класс от Component.
И также применяя компоновщик, мы легко можем обойти все узлы древовидной структуры.