设计模式的七大原则(7) --合成复用原则

前言

我们终于学习最后一个设计原则了,其实博主更新的还是挺慢的,因为我想一个一个吃透以后再继续学习,切记不要囫囵吞枣。

基本介绍

其实这个能说的内容很少,就是:尽量使用合成/聚合的方式,而不是使用继承

为什么要这样做?有一下两点原因:

  1. 通过继承来进行复用的主要问题在于继承复用会破坏系统的封装性,因为继承会将基类的实现细节暴露给子类,由于基类的内部细节通常对子类来说是可见的,所以这种复用又称“白箱”复用,如果基类发生改变,那么子类的实现也不得不发生改变;从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;而且继承只能在有限的环境中使用(如类没有声明为不能被继承)。
  2. 由于组合或聚合关系可以将已有的对象(也可称为成员对象)纳入到新对象中,使之成为新对象的一部分,因此新对象可以调用已有对象的功能,这样做可以使得成员对象的内部实现细节对于新对象不可见,所以这种复用又称为“黑箱”复用,相对继承关系而言,其耦合度相对较低,成员对象的变化对新对象的影响不大,可以在新对象中根据实际需要有选择性地调用成员对象的操作;合成复用可以在运行时动态进行,新对象可以动态地引用与成员对象类型相同的其他对象。

这个跟里氏替换原则还是挺像的,里氏替换原则建议我们不要重写父类的方法。这个就更直接干脆了,干脆你也别继承算了。省的惹出一系列的事故出来。

总结

设计原则系列到这里就告一段落了,后面我们将更新设计模式新的系列—— 23种具体的设计模式。但是在更新这个系列之前我们还有一个系列就是看懂UML图,我相信很多人对于UML图是不怎么看的懂的。对于依赖,组合,聚合,泛化等等都还是一知半解。后续待我一一道来。

哪有什么岁月静好,大家都是在负重前行。

各位,努力,奋斗!

posted @ 2019-08-13 11:36 正号先生 阅读(...) 评论(...) 编辑 收藏