组合和聚合之间的区别

无人久伴 提交于 2019-12-31 21:30:00

组合表示的是整体与部分的关系,比如:引擎是汽车Car的一部分,脱离了汽车的引擎毫无作用,没有实在的意义。
而聚合表示的是另一种关联关系,比如:人由身体所组成,应该由身体来组合为一个人,身体作为人的组合的一部分,人和人的手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人的身体在数据库中,应当直接作为人的属性存在。但一个记录人信息的文档,即便脱离人本身,也可以在其他地方体现价值,这就是聚合。

用更加理论化的文字阐述:
A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。
而在聚合的方式下,A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它,传给它的这个对象不是A类创建的。

容易看出,组合的关联关系要比聚合更强。

不过,组合和聚合的关系并不是一成不变的。假如有一个程序员,他只会写代码,那么他想用写代码谋生,就必须拥有一台电脑,那么程序员就与这台电脑为组合关系,一旦电脑坏了,程序员就会饿死,如果程序员能力太差,找不到饭吃然后饿死了,这台电脑也会被丢进垃圾桶送去焚烧。

这时电脑与程序员的关系应该是这样的:

public class Programmer {

    public Computer computer;

//程序员唯一一台电脑

    public Programmer() {
        computer = new Computer();
    }

    public void code() {
        computer.write();
    }

}

但如果程序员进入的公司很牛逼,公司会免费送程序员一台笔记本,以便他们回家之后也能继续为公司效力,那么这时电脑与程序员的关系就是聚合。

他们的关系应该是这样的:

public class Programmer {

    public Computer computer;

//公司免费提供的笔记本电脑

public void setComputer(Computer computer){
        this.computer = computer;
    }

    public void programmer() {
        computer.write();
    }

}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!