设计模式系列--23种常见设计模式之合成/聚合复用原则(6)

合成/聚合复用原则(Composition/Aggregation Reuse Principle)  也可以叫 组合复用原则。

概念

是指在一个新的对象中,使用已有的对象,使之成为新对象的一部分,正常发挥其作用。

使用原则

要尽量使用合成/聚合,尽量不要使用继承。

具体实现

聚合用来表示“拥有”关系,原有的合成新的,新的不存在了,旧的依然可以存在。整体与部分的关系。
代表部分的对象有可能会被多个代表整体的对象所共享,而且不一定会随着某个代表整体的对象被销毁或破坏而被销毁或破坏,部分的生命周期可以超越整体。
例如,班级和学生,毕业后,班级不存在了,学生的个体还在,学生可以去不同的公司,聚合形成新的对象。

合成用来表示一种“共存”关系,原有的合成新的,新的不存在了,旧的也就不存在了。一体化的关系。
在一个合成关系里,部分和整体的生命周期是一样的。一个合成的新对象完全拥有对其组成部分的支配权,包括它们的创建和销毁等,二者是同生共死的关系。
例如,一个人出生后,有了头、四肢和各种器官,人与各组织具有相同的生命周期,人死了,这些组织也就结束了生命周期。


编者按

复用的方式有两种:(1)合成-聚合 (2)继承实现

合成-聚合

已有的对象组合到新对象中,成为新对象的一部分。
1、新对象对组成对象的内部实现不知;
2、每个新对象可以将功能聚集在一个点上;
3、可以在运行时动态更新,动态的引用与组成对象类型相同的对象;
4、易于扩展和动态规划,组合方式多样化。

继承

已有的对象产生新对象,新对象拥有旧对象的特征。
1、使用继承,使得子类可以进一步完成父类的实现细节;
2、如果父类改变,则子类的实现也可能发生变化,影响系统的稳定性和健壮性;
3、继承是静态的,不能在运行时改变。(? 这个我也没想明白)

java中所提到的Is-A与Has-A的区别,就是继承与合成-聚合的关系。
Is-A代表的是父与子的关系,属于的关系。
Has-A代表的是我中有你的关系,包含的关系。
 

猜你喜欢

转载自blog.csdn.net/weisong530624687/article/details/109609127