zoukankan      html  css  js  c++  java
  • 设计模式的七大原则(7) --合成复用原则

    前言

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

    基本介绍

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

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

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

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

    总结

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

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

    各位,努力,奋斗!

  • 相关阅读:
    新年献礼 技术胖262集前端免费视频 让您走的更容易些
    Eruda 一个被人遗忘的调试神器
    你(可能)不知道的web api
    含有阶乘的幂级数和
    sin x 特解的假设
    将y=arctanx展开为x的幂级数
    判断数项级数是否收敛
    ubuntu中用安装字体的方法解决文档中的音标乱码
    英语单词
    用递归实现汉诺塔
  • 原文地址:https://www.cnblogs.com/zhxiansheng/p/11342245.html
Copyright © 2011-2022 走看看