聚合(Aggregation) 关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。 

组合(Composition) 关系是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。

 


组合关系:比如A类中包含B类的一个引用b,当A类的一个对象消亡时,
b这个引用所指向的对象也同时消亡。
聚合关系:反之b所指向的对象还会有另外的引用指向它。

现实生活中,人和手,脚是组合关系,因为当人死后
手和脚就不复存在了。
人和电脑就是聚合的关系

class Hand{}
class Computer{}
组合:
class Person{
private Hand hand;
public Person(){ //组合:hand对象在Person构造器中创建对象,hand对象的引用会存放在Person对象堆内存中;
hand=new Hand();
}
}
聚合:
class Person{
private Computer computer;
public setComputer(){ //聚合:computer对象在set方法里创建,然后创建computer对象,
//此时computer对象的引用存放在栈区,然后将computer对象的地址值赋给Person对象堆 //中的的computer属性(成员变量);
computer = new Computer();
}
}