组合表示的是整体与部分的关系,比如:引擎是汽车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();
}
}
来源:CSDN
作者:2/3?
链接:https://blog.csdn.net/TwT_Soul/article/details/103581521