Хорошо, позвольте мне сначала начать с объяснения различий между Агрегацией и Композицией.
Aggregation:
1. Ребенок в отношениях Агрегации может существовать независимо от родителя.
2. Агрегация может читаться как "HAS A"
Пример. Если у нас есть класс Wheel, то связь между классом Wheel и Car является агрегацией: «У автомобиля четыре колеса». Колесо может существовать вне контекста автомобиля.
Состав:
1. Ребенок в отношениях Композиции не может существовать независимо от родителя. Другими словами, для дочернего класса нет смысла существовать, если он не может быть размещен в родительском классе.
2. Композиция может читаться как ЧАСТЬ
Пример: если у нас есть класс Human, отношения между классом Heart и Human являются композиционными. Ты никогда не видел, чтобы сердце висело само по себе, не так ли? Отсюда и необходимость в композиции.
В Java мы представляем отношение Composition, используя private final
class Human { private final Heart heart; }
В то время как агрегация будет просто:
class Wheel { ... }
class Car { private List<Wheel> wheels; }
Теперь, скажем, мы хотели бы полностью удалить объект класса Human (, учитывая, что он не является донором органа ), отношение Композиция вынуждает нас уничтожить экземпляр сердца, связанный с этот человек. В Агрегации это не так, колеса могут использоваться другим автомобилем, если экземпляр автомобиля, к которому они принадлежали, потерпел крушение.
Надеюсь, это поможет.