设计模式的七大原则(7) --合成复用原则
程序员文章站
2022-06-16 23:44:16
前言 我们终于学习最后一个设计原则了,其实博主更新的还是挺慢的,因为我想一个一个吃透以后再继续学习,切记不要囫囵吞枣。 基本介绍 其实这个能说的内容很少,就是: 尽量使用合成/聚合的方式,而不是使用继承 为什么要这样做?有一下两点原因: 1. 通过继承来进行复用的主要问题在于继承复用会破坏系统的封装 ......
前言
我们终于学习最后一个设计原则了,其实博主更新的还是挺慢的,因为我想一个一个吃透以后再继续学习,切记不要囫囵吞枣。
基本介绍
其实这个能说的内容很少,就是:尽量使用合成/聚合的方式,而不是使用继承
为什么要这样做?有一下两点原因:
- 通过继承来进行复用的主要问题在于继承复用会破坏系统的封装性,因为继承会将基类的实现细节暴露给子类,由于基类的内部细节通常对子类来说是可见的,所以这种复用又称“白箱”复用,如果基类发生改变,那么子类的实现也不得不发生改变;从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;而且继承只能在有限的环境中使用(如类没有声明为不能被继承)。
- 由于组合或聚合关系可以将已有的对象(也可称为成员对象)纳入到新对象中,使之成为新对象的一部分,因此新对象可以调用已有对象的功能,这样做可以使得成员对象的内部实现细节对于新对象不可见,所以这种复用又称为“黑箱”复用,相对继承关系而言,其耦合度相对较低,成员对象的变化对新对象的影响不大,可以在新对象中根据实际需要有选择性地调用成员对象的操作;合成复用可以在运行时动态进行,新对象可以动态地引用与成员对象类型相同的其他对象。
这个跟里氏替换原则还是挺像的,里氏替换原则建议我们不要重写父类的方法。这个就更直接干脆了,干脆你也别继承算了。省的惹出一系列的事故出来。
总结
设计原则系列到这里就告一段落了,后面我们将更新设计模式新的系列—— 24中种具体的设计模式。但是在更新这个系列之前我们还有一个系列就是看懂uml图,我相信很多人对于uml图是不怎么看的懂的。对于依赖,组合,聚合,泛化等等都还是一知半解。后续待我一一道来。
哪有什么岁月静好,大家都是在负重前行。
各位,努力,奋斗!
上一篇: 两张图解释原型与原型链
下一篇: python对常见数据类型的遍历