Это концепция дизайна (на самом деле не шаблон).Этот термин используется, когда вы хотите описать один объект, содержащий другой.Это происходит очень часто в Состав над наследованием Обсуждение.
Кроме того, состав подразумевает сильную собственность.Один объект владеет (т.е. управляет жизненным циклом) другого объекта.Когда родитель уничтожен, все дети также уничтожены.Если таких сильных отношений нет (дети могут пережить родителя), мы говорим о агрегации .
Цитата замечательный пример в Википедии :
Например, университет владеет различными факультетами (например, химией), и на каждом факультете есть несколько профессоров.Если университет закроется, кафедры больше не будут существовать, но профессора на этих кафедрах продолжат существовать .Следовательно, университет можно рассматривать как состав кафедр , тогда как кафедр имеют совокупность профессоров .Кроме того, профессор может работать более чем на одном факультете, но факультет не может быть частью более чем одного университета.
Таким образом, как вы можете видеть, вы должны выбирать между составом или объединением в зависимости отТип отношений собственности.
Это шаблон проектирования GoF, описывающий прочные отношения родитель-потомок, где дочерний элемент может быть простым узлом или контейнеромдругие узлы (возможно, содержащие другие дочерние элементы).
Это очень часто встречается в графическом интерфейсе и древовидной структуре.Например, в Java Swing JPanel
может содержать различные элементы управления, такие как текстовые поля, метки, списки и т. Д., Но может содержать и другие JPanel
, которые, в свою очередь, могут содержать простые компоненты и даже больше вложенных панелей.
Обычно Составной шаблон проектирования использует композицию, однако в некоторых случаях родитель не должен владеть всеми дочерними элементами.Чтобы продолжить пример с графическим интерфейсом, вы можете взять одну панель и переместить ее в другое место (сменить родителя).