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


    前言

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

    基本介绍

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

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

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

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

    总结

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

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

    各位,努力,奋斗!

  • 相关阅读:
    AutoCAD 2013 .net插件创建向导现在支持Map 3D,Civil 3D,AutoCAD Architecture 和AutoCAD MEP
    AutoCAD® Civil 3D API需求意愿调查
    Linux 下动态库和静态库的创建和调用
    几个典型的内存拷贝及字符串函数实现
    典型的几个链表操作-逆序和重排
    打印 N*N 螺旋矩阵
    PhoneGap开发初体验:用HTML5技术开发本地应用
    不申请变量和空间反转字符串
    寻找最大公共子字符串
    二维动态数组定义及二维静态数组与**P的区别
  • 原文地址:https://www.cnblogs.com/zhxiansheng/p/11342245.html
Copyright © 2020-2023  润新知