我在谷歌上搜索,我比以前更困惑了。构图和表达都有关系吗?或者它只是聚合,所以合成就像“一部分”?或者我们只说object“has-a”另一个object意思是关系可以是复合的或聚合的。你能解释聚合和合成的区别吗?
此代码
public class Tree{
private Leaf leaf = new Leaf();
}
不同于
public class Tree{
private Leaf leaf;
public Tree(Leaf leaf){
this.leaf = leaf;
}
}
所以,我确定第一个是合成,因为只有树被创建了,叶才存在。但是在第二个示例中,树可能有一个来自“outside”列表的叶子引用,如果我删除(第二个示例)树,叶子仍然存在。
所以我们可以说:
组合是:当容器(树)对象被“删除”时,包含的(叶)也被“删除”
聚合是:当容器(第二棵树)对象被“删除”时,所包含的(叶子)不会被“删除”
是这样吗?
1条答案
按热度按时间ars1skjm1#
首先,有一点很清楚:组合和聚合都属于联想的范畴。意味着组合和聚合都是两种类型的关联。
当存在弱关联时,则此聚合,或当不存在部分-整体关系时,意味着子级可以独立于父级而存在。关联的例子是雇员和银行。一个人可以是任何银行的雇员,也可以更换银行。或者银行可以在没有雇员的情况下生存。
当存在强关联时,这就是组合,或者当存在部分-整体关系时,意味着子对象不能没有父对象而存在。构成的例子是人和人的心。心离不开人,人离不开心。”has“关键字只与composition一起存在,因为在composition中一个包含另一个的对象。