syshlang设计模式七大原则之合成复用原则(Composite Reuse Principle) | 浪迹一生

所谓拥有,皆非束缚;所有过往,皆为序章。

0%

设计模式七大原则之合成复用原则(Composite Reuse Principle)

    合成复用原则(CRP:Composite Reuse Principle)又称为组合/聚合复用原则(CARP:Composition/Aggregate Reuse Principle,),该原则指出尽量使用合成/聚合,尽量不要使用类继承。

    在面向对象设计中,其中一个很重要的目标 就是提高软件的高可复用性。而复用已有的设计和实现通常有两种方法,也就是上面提到的,通过组合/聚合关系或通过继承。但是,合成复用原则主张优先考虑使用组合/聚合的方式来达到复用的目的。
    为什么要这么主张呢?
    实际上在《设计模式七大原则之里氏代换原则(Liskov Substitution Principle)》一文中,我们就提到继承实际上是增强了两个类耦合性,子类在继承基类时,会将基类的实现细节暴露给子类,基类的内部细节通常对子类来说是可见的,其实这种复用又叫作“白箱”复用。这种复用容易在“不知情”的情况下破坏系统的封装性,所以遵循里氏代换原则,我们优先通过聚合,组合,依赖等方式来解决问题。
    组合/聚合复用有什么好处?
    通过组合或聚合达到复用目的的做法实际上是,将已有的成员对象加入到新的对象中,让其成为新对象的一部分,而不破坏原有对象的封装,这样使得成员对象的内部细节不会暴露给新对象,所需的依赖较少,相对于继承复用来说,这种方式降低了耦合性,这种复用又叫作“黑箱”复用

合成:表示一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。
合成关系用实心的菱形+实线来表示,如下图:

聚合:表示一种弱的拥有关系,体现的是A对象可以包含B对象,但是B对象并不是A对象的一部分。
聚合关系用空心的菱形+实线来表示,如下图:

    合成/聚合复用原则在设计模式中最好的体现就是桥接(Bridge)模式,后面介绍设计模式时再继续介绍。

------------- The End -------------
  • 本文作者: 浪迹一生
  • 本文链接: https://www.syshlang.com/fd78ccb3/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!