组合和聚合的区别不是在形式上,而是在本质上
聚合关系(Aggregation)体现的是A对象可以包含B对象,但B对象不是A对象的组成部分。具体表现为,如果A由B聚合成,表现为A包含有B的全局对象,但是B对象可以不在A创建的时刻创建。
组合关系(Composition):如果A由B组成,表现为A包含有B的全局对象,并且B对象在A创建的时刻创建。
现实生活中,人和人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人和他的电脑是聚合关系
组合实例:
public class Person {
private Hand hand;
public Person() {
hand=new Hand();
}
private void go(){
hand.hand();
}
public static void main(String[] args) {
new Person().go();//person消亡时,hand也消亡
}
}
class Hand{
public void hand(){
System.out.print("hand");
}
}
聚合
实例
public class Person2 {
private Computer c;
public Person2(){
}
public Person2(Computer c){
this.c=c;
}
public void go(){
c.computer();
}
public static void main(String[] args) {
Computer computer=new Computer();
Person2 person = new Person2(computer);
person.go();//person消亡时,不影响computer
}
}
class Computer{
public void computer(){
System.out.print("computer");
}
}
比如在A类中引用B类的一个引用b,当A类消亡时,b这个引用所指对象也
同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况叫组合,
反之b所指的对象还会有另外的引用它,这种情况叫聚合