一、概念
聚合是一种特殊的关联形式,代表了has-a关系;它是类(或实体)之间的一种单向关系。例如:钱包和钱,钱包会有钱,钱里面不会包含钱包;这是一种天生的单向关系。在聚合的关系中,两种类(或实体)是可以单独存在的,不会相互影响;也就是说:一个类(或实体)的是否存在不会影响与之聚合的其他类的存在与否。
组合是一种受限制的聚合形式,代表了part-of关系;其中的两个实体(或者类)是高度依赖于彼此的。就好比如:人类和心脏,人类需要心脏来生存,心脏也需要人体才能生存。|换句话说,当类(实体)彼此依赖并且它们的寿命相同时(如果一个人死了,那么另一个也是死去),那么它就是一个组合。例如:如果没有人类,心脏就没有意义了。
二、区别
1、依赖性区别
聚合中的两种类(或实体)是可以单独存在的,不会相互影响;被关联的一方可以独立于关联一方,依赖性不强。相反,组合中的两个实体(或者类)是高度依赖于彼此的,它们之间会相互影响。
2、关系类型的区别
聚合代表了has-a关系,一种单向关系;组合代表了part-of关系。
3、关联强度的不同
聚合是一种弱关联关系;组合是一种强关联关系。
4、生命周期的不同
在聚合关系中的两个类(或实体)的生命周期是不同步;但,在组合关系中的两个类(或实体)的生命周期是同步的。
三、图解及实例
(1)聚合
是一种has-a的关系 整体和部分。整体不存在的时候,但部分可以独立存在。
以person 和address为例,人和衣服的关系
public class Address{} //衣服类
public class Person //人类
{
private Address address;
public Person(Address address)
{this.address=address;}
}
Person person=new Person(new Address()) (2)组合 一种严格的has-a关系 以汽车和引擎为例 Public class Engine{}//引擎类 Public class Car//汽车类 { Engine e =new Engine()//在车中进行实例化引擎类,Engine对象是在car对象中创建的 }