设计模式-开闭原则

开放封闭原则

Software entities like classes,modules and functions should be open forextension but closed for modifications.(一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。)

例子:书籍促销,所有40元以上的书籍9折销售,其他的8折销售小说书进行打折促销;

image-20201129165244186

增加一个子类OffNovelBook,覆写getPrice方法,高层次的模块(也就是static静态模块区)通过OffNovelBook类产生新的对象,完成业务变化对系统的最小化开发

开闭原则重要性

  • 开闭原则对测试影响
    已经投产的代码,因为业务有变化提出,如果修改原有健壮的代码,需要将原有测试流程重新进行功能测试、单元测试、集成测试及验收,通过扩展,只需测通附加的扩展代码即可;
  • 开闭原则提高服用性
    减少代码量,避免相同的逻辑分散在多个角落,避免日后的维护人员为了修改一个微小的缺陷或增加新功能而要在整个项目中到处查找相关的代码;
    怎么才能提高复用率呢?缩小逻辑粒度,直到一个逻辑不可再拆分为止。
  • 开闭原则可以提高可维护性
    一款软件投产后,维护人员的工作不仅仅是对数据进行维护,还可能要对程序进行扩展,维护人员最乐意做的事情就是扩展一个类,而不是修改一个类;

开闭原则运用

  • 抽象约束
    通过接口或抽象类可以约束一组可能变化的行为,并且能够实现对扩展开放,其包含三层含义:

    第一,通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法;

    第二,参数类型、引用对象尽量使用接口或者抽象类,而不是实现类;

    第三,抽象层尽量保持稳定,一旦确定即不允许修改。还是以书店为例,目前只是销售小说类书籍,单一经营毕竟是有风险的,于是书店新增加了计算机书籍,它不仅包含书籍名称、作者、价格等信息,
    还有一个独特的属性:面向的是什么领域,也就是它的范围,比如是和编程语言相关的,还是和数据库相关的,等等

    image-20201129164434100

    计算机书籍增加了一个方法,就是获得该书籍的范围,同时继承IBook接口,毕竟计算机书籍也是书籍

  • 制定项目章程
    在一个团队中,建立项目章程是非常重要的,因为章程中指定了所有人员都必须遵守的约定,对项目来说,约定优于配置。

    优秀的章程能带给项目带来非常多的好处,如提高开发效率、降低缺陷率、提高团队士气、提高技术成员水平,等等x

  • 封装变化
    对变化的封装包含两层含义:

    第一,将相同的变化封装到一个接口或抽象类中;

    第二,将不同的变化封装到不同的接口或抽象类中,不应该有两个不同的变化出现在同一个接口或抽象类中;

posted @ 2020-11-29 17:26  walkingSun  阅读(202)  评论(0编辑  收藏  举报
**/