从Java代码上来讲,我觉得组合可以看作聚合的特殊情况,组合的代码可通过两种方式来实现:
1)部分对象作为整体对象的成员变量而存在,随着整体对象的初始化,所有的部分对象也一并进行初始化,当整体对象被垃圾回收时,作为成员的部分对象也会同时被销毁;
2)部分对象作为整体对象的内部类的实例而存在。
1)部分对象作为整体对象的成员变量,与组合的代码类似;
2)整体对象中维护部分对象的指针变量,部分对象的实例化操作在类的外部进行,所以部分类的生命周期不会受整体类直接影响。
聚合 聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与cpu、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分; 组合 组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
原文链接:https://www.f2er.com/javaschema/287031.html