软件设计七大原则之开闭原则

Posted zhangblearn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件设计七大原则之开闭原则相关的知识,希望对你有一定的参考价值。

开闭原则:

  对于一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。

  实际意义:软件的变化不应该通过修改已有的代码来实现变化。

  实现手段:用抽象构建框架,用实现扩展细节

  优点:提高软件系统的可复用性及可维护性

 

案例Coding:

  课程类拥有id、name、原有价格。并通过实现ICourse接口去构建方法

  技术分享图片技术分享图片

Test:将课程相关信息输出

  技术分享图片

此时的类结构图为:

  技术分享图片清晰简洁的类结构图,类和接口实现了依赖关系

此时当有打折活动时,我们需要对课程的价格进行打折,并要求输出打折价跟原价。首先我们会想到在原有的接口中增加一个打折方法getDiscountPrice(),并实现。来输出打折后的价格。OK,这好像没问题,实际上我们修改了原有类跟原有接口,当课程类多时,对接口和类的代码修改会很大。对于接口我们不应该经常变化,应该是稳定且可靠的,否则接口作为契约的作用就失去了意义。

那么换一个思路:

  我们新建一个打折类,JavaDiscountCourse来继承JavaCource。此时重写父类的getPrice方法,并实现打折业务,并创建一个获取原价的方法

  技术分享图片

那么我们在Test中获取相关信息时,可以这么写:

技术分享图片

通过父类指向子类,并通过强制调用子类的方法,来实现需求。

此时的类图:

技术分享图片

对于基类和底层接口,我们没有进行修改,我们只是改变了偏应用层的代码。当接口和实现类的逻辑复杂时,我们应该

尽量避免对基类和底层接口的修改,去新增子模块来实现新功能,防止修改基类导致风险扩散。便于后期代码维护和复用。

以上是关于软件设计七大原则之开闭原则的主要内容,如果未能解决你的问题,请参考以下文章

七大设计原则之开闭原则应用

6大设计原则之开闭原则

设计模式——六大原则之开闭原则

面向对象设计原则之开闭原则

23种设计模式之开闭原则

设计模式之开闭原则