zoukankan      html  css  js  c++  java
  • 设计模式系列之设计原则(1)开闭原则

    在进行软件设计阶段,或者说架构设计阶段,遵循一些设计原则能够搞软件的可读性、复用性、可维护性。在讨论设计模式之前,有必要先掌握设计原则的相关知识,它可以作为评价一个设计是否良好的尺度。本质上,我们所说的设计模式就是对某些设计原则的比较好的实现实例。

    定义

    • 软件实体应当对扩展开放,对修改关闭。其中软件实体包括:

      1. 项目中划分出的模块
      2. 类与接口
      3. 方法

      其含义是:在软件的生命周期内,因需求变化、升级和维护等原因需要对软件代码修改时,通过扩展软件实体的行为来实现变化,而不是通过修改已有代码来实现变化。

      通俗的讲,当一个java的模块、类、接口、方法被完成后,不要再去改动那些已经产生作用的、通过测试的旧代码,想要新功能就在这个旧代码基础之上扩展。

      扩展即本体不动,在本体之外进行添加操作。修改则是直接修改本体。开放扩展和关闭修改这两个词已经表达出实现开闭原则的手段。

    作用

    总的来说,在设计软件实体时,开闭原则是一个总纲式的原则,也是面向对象程序设计的终极目标。所谓总纲式是指如果软件实体满足了其他设计原则,最终就会满足开闭原则。开闭原则在使软件实体拥有一定的适应性和灵活性的基础上,强调了软件实体的稳定性(关闭修改)和延续性(开放扩展)。具体的作用如下。

    • 减少重复测试

      软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常运行。

    • 减少引入新错误

      假设没有遵循开闭原则,有新需求时,修改历史代码,则有可能在历史代码中引入错误,造成历史正常的功能不能使用。基于开闭原则,我们可以通过继承历史代码来实现新的需求,这样避免在历史代码中引入新的错误。

    • 提高代码复用性

      因为关闭修改,所以这一部分代码可以被复用。

    • 提高软件可维护性

      因为可以扩展,所以在产生新的业务需求时,直接添加代码即可。同时能修改和不能修改的代码区域已经确定,代码结构上比较清晰。

    实现方式

    开闭原则的实现方式可以概括为:用抽象构建基础框架,用封装实现业务功能。抽象是指开发人员通过对需求的理解分析,从中抽象出相对稳定的、基本不变的基础框架,其目的是为了制定规范和契约。在具体的java环境下,是通过接口抽象类为软件实体定义一个相对稳定的抽象层。对于需求的生长变化,则重新派生一个实现类来进行扩展,派生则是通过java语言层面中的实现接口或继承基类的方式。

    代码实践

    在进行工程实践过程的早期阶段,业务功能的快速实现优先级较高,对项目的整体优化不会作为主要考量指标。对于具体的编程人员,实现设计原则可通过微重构或局部重构。代码结构类图如下。
    image-20201014112015353

    编程知识点

    • 对项目包的命名时,两个单词合并在一起时,使用全小写,而不是驼峰结构。这是jdk包的命名方式。点分隔符之间有且仅有一个自然语义的英语单词。
    • 接口命名用大写字母 I 开头,其后采用驼峰命名业务字段,例如接口名 ICourse。
    • 生产环境不能使用System.out.println(),因为底层对priintLn方法的实现有锁,具体原因不详。

    参考文献

  • 相关阅读:
    ubuntu14.0 服务器webmin安装
    python如何简单的处理图片(1):打开显示
    如何在YouTube上下载视频
    Ubuntu下下载使用sublime
    IndentationError: unexpected indent
    Linux下vim显示行数
    Linux下tree的使用介绍
    Mac利用分屏spliter
    redis开机自启动脚本(linux)
    java 反射应用
  • 原文地址:https://www.cnblogs.com/guojuboke/p/13838547.html
Copyright © 2011-2022 走看看