zoukankan      html  css  js  c++  java
  • OCP开放闭合

    软件应该是可以扩展的,但是不可以修改的。

    对扩展都是开放的,模块式可以扩展来满足新的行为,我们可以改变模块的功能。

    OCP的好处是,尽可能的减少修改模块的次数和范围,从而提高代码的可维护性,复用性。比如操作系统的升级补丁,在修复bug的情况下,肯定是越小越小。如果说OCP做的不好,每次修改需要修改大量的文件,那就会导致补丁很大。

    对于修改是封闭的,在扩展模块的时候,不必改动源代码的二进制文件,不管是.o文件还是.dll文件都不用改动。

    问题的核心是怎么样改变了模块的功能却又不改变模块的代码呢?

    关键是抽象!

    比如说,client类会调用server的一些接口,这样就会对server产生依赖,如果想换一个server,那就需要修改client,这就违反了,OCP。好的做法是让client依赖于一个接口,这样client不会关注server的具体实现。

        

    需要注意的一点是,为什么叫client interface而不是叫server Base?因为抽象类和它客户的关系比和实现他们的类的关系更加重要。

    真正的OCP是不可能会实现的,我们只能在可以预见的范围内分析软件的变化及不变,进行取舍。为了实现OCP而进行的过度的抽象是非常划不来的。

  • 相关阅读:
    移动端常用单位——rem
    媒体查询media query
    canvas——绘制解锁图案
    canvas——离屏
    canvas——动画实例
    canvas绘制圆弧
    canvas二次贝塞尔&三次贝塞尔操作实例
    form表单中id与name的区别
    数据存储 mysql
    数据存储 csv
  • 原文地址:https://www.cnblogs.com/HighFun/p/2607456.html
Copyright © 2011-2022 走看看