一、概念上
1.Composition 表示的是'Part-od'的关系
比如:引擎Engine是汽车Car的一部分,脱离了汽车的引擎毫无作用,没有实在的意义
2.而Aggregation表示的是'Has-a'的关系
比如:Person有一个Address,但是Address的存在不依赖于Person,即地址本身就有其独立存在的意义,不受人的约束。3.就强弱关系而言:
Composition应该更强一些
二、举个栗子
现在设计几个实体类,通过实体类之间的关系来体现组合与聚合的区别:
实体类:人
class People{
String name;
String identityId; //身份属性的ID
Body body; //身体对象属性
//省略getter、setter方法
}
实体类:身体
class Body{
String 内脏;
String 手;
String 脚;
}
实体类:身份信息
class Identity{
Integer id;
String number; //身份证号
String name; //姓名
....
}
由人(People)、身体(Body)、身份信息(Identity)之间的关系可以看出。人由身体所组成,应该由身体来组合为一个人,身体作为人的组合的一部分。体现在数据存储时,即不必将身体(Body)存储在数据库中,而是直接作为人的属性存在。
而Identity,记录着一个人的各种信息,脱离People之后,可能会有别的地方依旧会使用到该属性。因此这个就是聚合,在设计实体类时,直接保存其ID即可。