开闭原则:
对于一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。
实际意义:软件的变化不应该通过修改已有的代码来实现变化。
实现手段:用抽象构建框架,用实现扩展细节
优点:提高软件系统的可复用性及可维护性
案例Coding:
课程类拥有id、name、原有价格。并通过实现ICourse接口去构建方法
Test:将课程相关信息输出
此时的类结构图为:
清晰简洁的类结构图,类和接口实现了依赖关系
此时当有打折活动时,我们需要对课程的价格进行打折,并要求输出打折价跟原价。首先我们会想到在原有的接口中增加一个打折方法getDiscountPrice(),并实现。来输出打折后的价格。OK,这好像没问题,实际上我们修改了原有类跟原有接口,当课程类多时,对接口和类的代码修改会很大。对于接口我们不应该经常变化,应该是稳定且可靠的,否则接口作为契约的作用就失去了意义。
那么换一个思路:
我们新建一个打折类,JavaDiscountCourse来继承JavaCource。此时重写父类的getPrice方法,并实现打折业务,并创建一个获取原价的方法
那么我们在Test中获取相关信息时,可以这么写:
通过父类指向子类,并通过强制调用子类的方法,来实现需求。
此时的类图:
对于基类和底层接口,我们没有进行修改,我们只是改变了偏应用层的代码。当接口和实现类的逻辑复杂时,我们应该
尽量避免对基类和底层接口的修改,去新增子模块来实现新功能,防止修改基类导致风险扩散。便于后期代码维护和复用。
原文地址:https://www.cnblogs.com/zhangbLearn/p/9520866.html
时间: 2024-10-09 08:12:40