Java Has-A 关系、组合或聚合
Java Has-A relationship, composition or aggregation
我在 google 上进行了搜索,我比以前更加困惑了。
Has-A 关系既是组合又是聚合?
或者它只是聚合,所以组合就像“Part-Of”?
或者我们只是说对象“有一个”其他对象意味着关系可以是组合或聚合。
您能解释一下聚合和组合之间的区别吗?
这个代码
public class Tree{
private Leaf leaf = new Leaf();
}
不同于
public class Tree{
private Leaf leaf;
public Tree(Leaf leaf){
this.leaf = leaf;
}
}
所以,我确定第一个是 Composition,因为只有在创建 Tree 时才会存在叶子。但是对于第二个例子,树可能有一个来自“外部”列表的叶子引用,如果我删除(第二个例子)树,叶子仍然存在。
所以我们可以这样说:
- 组成是:当容器(树)对象被“删除”时,包含的(叶子)也被“删除”
- 聚合是:当容器(第二棵树)对象被“删除”时,包含的(叶)未被“删除”
这样对吗?
首先明确一件事
组合和聚合都属于关联的范畴。表示组合和聚合都是两种关联。
当存在弱关联时,则此聚合,或者当没有部分整体关系时,意味着 child 可以独立于 parent 存在。协会的例子是员工和银行。一个人可以是任何一家银行的雇员,也可以更换银行。或者银行可以在没有员工的情况下存在。
当有很强的关联时,这就是组合,或者当有部分时,整个关系意味着 child 不能没有 parent。组合的例子是人类及其心脏。心不能离开人而独立存在,人也不能离开心而独立存在。 “有一个”关键字只存在于组合中,因为在组合中一个包含另一个object。
我在 google 上进行了搜索,我比以前更加困惑了。 Has-A 关系既是组合又是聚合? 或者它只是聚合,所以组合就像“Part-Of”? 或者我们只是说对象“有一个”其他对象意味着关系可以是组合或聚合。 您能解释一下聚合和组合之间的区别吗?
这个代码
public class Tree{
private Leaf leaf = new Leaf();
}
不同于
public class Tree{
private Leaf leaf;
public Tree(Leaf leaf){
this.leaf = leaf;
}
}
所以,我确定第一个是 Composition,因为只有在创建 Tree 时才会存在叶子。但是对于第二个例子,树可能有一个来自“外部”列表的叶子引用,如果我删除(第二个例子)树,叶子仍然存在。
所以我们可以这样说:
- 组成是:当容器(树)对象被“删除”时,包含的(叶子)也被“删除”
- 聚合是:当容器(第二棵树)对象被“删除”时,包含的(叶)未被“删除”
这样对吗?
首先明确一件事 组合和聚合都属于关联的范畴。表示组合和聚合都是两种关联。
当存在弱关联时,则此聚合,或者当没有部分整体关系时,意味着 child 可以独立于 parent 存在。协会的例子是员工和银行。一个人可以是任何一家银行的雇员,也可以更换银行。或者银行可以在没有员工的情况下存在。
当有很强的关联时,这就是组合,或者当有部分时,整个关系意味着 child 不能没有 parent。组合的例子是人类及其心脏。心不能离开人而独立存在,人也不能离开心而独立存在。 “有一个”关键字只存在于组合中,因为在组合中一个包含另一个object。