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。