Подтвердить что ты не робот

Модели проектирования: композитный и композиционный

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

  • Это правильно? Может кто-нибудь объяснить это мне немного лучше?
  • Когда я предпочитаю один за другим?
4b9b3361

Ответ 1

Composition

Это концепция дизайна (на самом деле не шаблон). Этот термин используется, когда вы хотите описать один объект, содержащий другой. Это происходит очень часто в обсуждении Состав над наследованием.

Кроме того, композиция подразумевает сильное владение. Один объект владеет (т.е. Управляет жизненным циклом) другого объекта. Когда родитель уничтожается, все дети также уничтожаются. Если таких сильных отношений нет (дети могут пережить родителя), мы говорим о агрегации.

Цитата: отличный пример в Википедии:

Например, университет владеет различными отделами (например, химией), и в каждом отделе есть несколько профессоров. Если университет закрывается, отделы больше не будут существовать, но профессора в этих отделах будут продолжать существовать. Поэтому Университет можно рассматривать как состав отделов, тогда как отделы имеют агрегацию профессоров. Кроме того, профессор мог работать в более чем одном отделе, но отдел не мог быть частью более чем одного университета.

Итак, вы можете видеть, что вы должны выбирать между композицией или агрегацией в зависимости от типа отношения собственности.

Композитный шаблон

Это шаблон дизайна GoF, описывающий сильные отношения родитель-ребенок, где ребенок может быть простым node или контейнером других узлов (возможно, с другими детьми).

Это очень часто встречается в графическом интерфейсе и структуре дерева. Например. в Java Swing a JPanel может содержать различные элементы управления, такие как текстовые поля, метки, списки и т.д., но он также может содержать другие JPanel, которые, в свою очередь, могут содержать простые компоненты и еще больше вложенных панелей.

Обычно композитный шаблон использует композицию, однако в некоторых случаях родитель не должен владеть всеми дочерними элементами. Чтобы продолжить пример GUI, вы можете взять одну панель и перенести ее в другое место (сменить родителя).