码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-08-23 00:27:32      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:技术   name   依赖   开放   增加   类图   应该   函数   ntp   

开闭原则:

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

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

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

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

 

案例Coding:

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

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

Test:将课程相关信息输出

  技术分享图片

此时的类结构图为:

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

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

那么换一个思路:

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

  技术分享图片

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

技术分享图片

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

此时的类图:

技术分享图片

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

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

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

标签:技术   name   依赖   开放   增加   类图   应该   函数   ntp   

原文地址:https://www.cnblogs.com/zhangbLearn/p/9520866.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!