Вы можете хранить свои компоненты в любой структуре данных, которая вам нравится. Дело в том, что каждый из ваших компонентов также может рассматриваться как «целый».
Самый простой пример - это объект CompositeView, который содержит подпредставления. CompositeView - это View, а его объекты subview также являются Views. Таким образом, у вас есть общий интерфейс / абстрактный класс для ваших объектов. Неважно, какая структура данных используется для хранения подпредставлений.
В упомянутой древовидной структуре ваш список / набор / dag / что угодно ... компонентов определяет набор дочерних узлов для данного родительского узла.
Другим примером может быть Кирпич , Стена , Дом , Блок . Стена состоит из множества кирпичей; таким же образом дом состоит из четырех стен (например, оставьте меня, скажем, у дома нет крыши), а блок состоит из многих домов. Кирпич в шаблоне Composite представляет собой Leaf, вместо этого Wall, House, Block являются специализациями Composite, но all можно рассматривать как ConstructionComponents (или ConstructionEntities).