工程画图-UML类图 组合和聚合
组合VS聚合
组合&聚合浅层理解
组合似组装,电脑组装,少装一个CPU行不?不行,没CPU哪还是电脑啊。用实心菱形表示。
而聚合似起义,聚是一团火,散是满天星。就像公司和员工,少你一个照常运转。
所以组合比聚合绑的更深。
组合&聚合代码级理解
现实中很好想象组合和聚合,离了谁不行,那就是组合, 离了谁照常运转那就聚合。组合是强关系,聚合是弱关系。
但是!在代码里呢?怎么表示呢?反正我总是在这方面混淆。这次务必是要记得彻底的。我们分析下哈。
请看下列代码。
class A {
private B mB;
}
class B {
}
你怎么知道A和B它是聚合关系还是组合关系呢?
So,我们要引入组合和聚合关系的另外一个重大特点:生命周期
组合:在编程中,如果 B对象的生命周期依赖于A对象,当A的生命周期结束的时候,B必不能独立存活。当这种关系存在的时候,那就是组合关系。正如电脑和CPU, 在电脑看来,离不开CPU,其实在CPU看来,组不到主板上去,那自己的存在也没有什么价值。
聚合:如果A对象需要B对象的存在,离开了B对象也能运转,并且B对象即使离开了A对象,人家的声明周期依然正常,可以被别的对象继续使用。那就是聚合。
所以对于以下代码是组合!
class A {
private B mB;
public void A {
this.mB = new B();
}
public boolean onDestory(){
this.mb = null;
}
}
class B {
}
对于以下代码是聚合!
class A {
private B mB;
}
class B {
}
如下图所示: