设计模式系列之设计原则(1)开闭原则

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

定义

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

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

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

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

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

作用

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

  • 减少重复测试

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

  • 减少引入新错误

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

  • 提高代码复用性

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

  • 提高软件可维护性

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

实现方式

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

代码实践

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

编程知识点

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

参考文献

posted on 2020-10-19 09:40  tylerGuo  阅读(301)  评论(0编辑  收藏  举报

导航