Шаблоны программирования на Swift: Composite

dp_composite-proSwift_ru

 

В этой статье мы разберем шаблон программирования Компоновщик (Composite) на языке программирования Swift в среде разработки Xcode.

И как обычно, разбираем то что  написано в книге:

Composite

Вы задумывались как много в нашей жизни древовидных структур? Начиная собственно с самих деревьев и заканчивая структурами компаний. Да ладно, даже,  компаний – целые страны используют древовидные структуры чтобы построить власть.

Во главе компании или страны частенько стоит один человек, у него есть с 10 помошников. У них тоже есть с десяток помошников, и так далее… Если нарисовать их отношения на листе бумаги – увидим дерево!
Очень часто, и мы используем такие типы даных, которые лучше всего храняться в древовидной структуре. Возьмите к примеру стандартный UI: в начале у нас есть View, в нем находяться Subview, в которых могут быть или другие View, или все такие компоненты. Та же самая структура:)

Именно для хранения таких типов данных, а вернее их организации, используется паттерн – Composite или Компоновщик.

Когда использовать такой паттерн?

Собственно когда вы работаете с древовидными типами данных, или хотите отобразить иерархию даных таким образом.
Давайте разберем более детально структуру:
В начале всегда есть контейнер в котором находятся все остальные объекты. Контейнер может хранить как другие контейнеры – ветки нашего дерева, так и объекты которые контейнерами не являюстся – листья нашего дерева. Не сложно представить, что контейнеры второго уровня могут хранить как другие контейнеры, так и листья.
Давайте пример!
Начнем с создания протокола для наших объектов:

Как видим наш объект не может добавлять себе детей (ну он же не контейнер:) ), и может возвращать свое значение с помощью метода getData.

Теперь нам очень необходим контейнер:

Как видим, наш контейнер может добавлять в себя детей, которые могут быть как типа Container так и типа Leaf. Метод getData бегает по всем объектам в массиве components, и вызывает тот же самый метод в детях. Вот собственно и все.
Теперь, конечно же пример:

Лог выглядит следующим образом:

В корневом контейнере содержится один лист и две ветки, которые содержат по одному листу. Именно это и отражает наш лог.

Пример с  GitHub

Шаблон компоновщик или Composite используется для создания иерархической, рекурсивной древовидной структуры связанных объектов, где любой элемент структуры может быть доступен и используется стандартным образом.

Код не сложный: протокол — фигура, два варианта листов — квадрат и круг, и компановщик — белый лист, который содержит массив фигур. При рисовании мы пробегаемся по всем объектам из этого массива и вызываем метод рисования для каждой фигуры.

Лог в консоль:

Опубликовано в Фундаментальные основы, Шаблоны программирования iOS Swift Метки:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*