Определение составного шаблона дизайна - PullRequest
0 голосов
/ 30 апреля 2018

В книге «Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения» говорится:

"Составной шаблон проектирования объединяет объекты в древовидные структуры для представления иерархий части-целого."

В википедии шаблон составного дизайна определяется как:

"Составной шаблон описывает группу объектов, которые обрабатываются так же, как один экземпляр объекта того же типа. Цель составного объекта состоит в том, чтобы" составить "объекты в древовидные структуры для представления иерархий части-целого . "

Изображение рисунка составного дизайна:

enter image description here

Если my Composite хранит components как ориентированный ациклический граф (например, он хранит только компоненты, которые являются источниками DAC в структуре данных очереди, и эти источники имеют ссылки на другие компоненты и т. Д.), Что не является дерево, потому что оно нарушает некоторые условия древовидной структуры. Могу ли я сказать, что использовал шаблон составного дизайна?

1 Ответ

0 голосов
/ 01 мая 2018

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

Самый простой пример - это объект CompositeView, который содержит подпредставления. CompositeView - это View, а его объекты subview также являются Views. Таким образом, у вас есть общий интерфейс / абстрактный класс для ваших объектов. Неважно, какая структура данных используется для хранения подпредставлений.

В упомянутой древовидной структуре ваш список / набор / dag / что угодно ... компонентов определяет набор дочерних узлов для данного родительского узла.

Другим примером может быть Кирпич , Стена , Дом , Блок . Стена состоит из множества кирпичей; таким же образом дом состоит из четырех стен (например, оставьте меня, скажем, у дома нет крыши), а блок состоит из многих домов. Кирпич в шаблоне Composite представляет собой Leaf, вместо этого Wall, House, Block являются специализациями Composite, но all можно рассматривать как ConstructionComponents (или ConstructionEntities).

...