如果我正确理解组成和聚合是对象共享的关系。在合成中,没有父对象就不能存在从属对象。而在聚合中,从属对象可以不存在父对象而存在。在Java中,通过具有非静态内部类来实现组合,而在具有静态内部类或对象引用时可以实现聚合。如果我错了,请纠正我。浏览了很多网站,但只是感到困惑而没有得到满意的答案。
协会关联是指多个对象之间的关系。它指的是对象如何相互关联以及它们如何使用彼此的功能。组合和聚合是两种关联类型。
组成组成是强大的关联类型。如果一个对象拥有另一个对象,并且没有所有者对象就不能存在另一个对象,则称该关联为复合。考虑人类有一颗心的情况。这里的人类对象包含着心灵,没有人类,心灵就无法存在。
汇总聚集是一个弱关联。如果两个对象可以独立存在,则关联被称为聚合。例如,一个Team对象和一个Player对象。团队包含多个玩家,但一个玩家可以不带团队而存在。
Example of Composition
//Car must have Engine
public class Car {
//engine is a mandatory part of the car
private final Engine engine;
public Car () {
engine = new Engine();
}
}
//Engine Object
class Engine {}
Example of Aggregation
//Team
public class Team {
//players can be 0 or more
private List players;
public Car () {
players = new ArrayList();
}
}
//Player Object
class Player {}