简单理解UML中关联-聚合-组合
1、关联
一个对象可以发送消息给另外一个对象,简单讲就是一个对象持有另外一个对象的指针或者引用,典型情况如下:
public class A{ private B b; } public class B{}
或者这种情况:
public class A{ public void f(B b){} } public class B{}
2、聚合(aggregation)
聚合表示一种has-a关系,通常用于表示整体-部分关系,但是这个“部分”的生命周期并不依赖于“整体”,可以理解为一个弱化的has-a关系,也就是说,“整体”和“部分”是单独存在的,其UML图如下:
public class Person{
private Address address;
public Person(Address address){
this.address = address;
}
}
public class Address{}
每一个Person都有一个Address,但是不能讲这个Address就是这个Person的,当Person搬家的时候(销毁Person对象),这个Address仍然存在.
使用Person对象的代码:
Address address = new Address(); Person person = new Person(address);
所以,从以上代码看,Person和Address的生命周期是相对独立的。
3、组合(Composition)
组合相对聚合来讲,是一种更加严格的has-a关系,当“整体”消亡后,“部分”也就消亡了,拿最常见的汽车和轮子或者房子和窗户的例子讲,组合的UML图如下:
代码:
public class Car{ private Wheel wheel = new Wheel(); } public class Wheel{ }
从代码可以看出,Wheel是在Car中建立的,所以当Car生命周期结束后,Wheel的声明周期也就结束了。