Java设计模式-七大架构设计原则-开闭原则
从这一专栏开始将学习设计模式,上课学习和自己总结归纳的笔记将总结出来供大家参考。
参考书籍:《设计模式就该这样学》
其他文章:
开闭原则
开闭原则(Open-Closed Principle OCP):指的是一个软件实体(类、模块和函数)应该对扩展开放,对修改关闭。
好处:用抽象构建框架,用实现扩展细节,提高软件系统的可复用性和可维护性。
实现开闭原则的核心是面向抽象编程
1.1开闭原则的实际应用
现在有一个培训班(Icouse接口),开设了java课程(JavaCourse类),现在要给java课程价格打5折,请写出这个方法
如果要修改JavaCourse类中getPrice(),会存在一定风险,可能会影响其他地方调用的结果
/**
* 培训班(Icouse接口)
* @author WxrStart
* @create 2022-03-08 14:59
*/publicinterfaceICourse{/**
* 获取课程名
* @return
*/StringgetCourseName();/**
* 获取课程价格
* @return
*/DoublegetPrice();}
/**
* java课程(JavaCourse类
* @author WxrStart
* @create 2022-03-08 14:59
*/publicclassJavaCourseimplementsICourse{//课程名privateString courseName;//课程价格privateDouble price;publicJavaCourse(String courseName,Double price){this.courseName= courseName;this.price= price;}publicStringgetCourseName(){returnthis.courseName;}publicDoublegetPrice(){returnthis.price;}}
所以我们新建一个处理优惠逻辑的JavaDiscount类
/**
* 处理Java课程优惠逻辑
* @author WxrStart
* @create 2022-03-08 15:04
*/publicclassJavaDiscountCourseextendsJavaCourse{publicJavaDiscountCourse(String courseName,Double price){super(courseName, price);}@OverridepublicDoublegetPrice(){returnsuper.getPrice();}publicDoublegetDisCountPrice(){System.out.println(getCourseName()+"课程打折之前:"+super.getPrice());returnsuper.getPrice()*0.5;}}
1.2测试类及其结果
publicclassOcpTest{publicstaticvoidmain(String[] args){JavaDiscountCourse javaDiscountCourse=newJavaDiscountCourse("Java课程",1000.0);System.out.println(javaDiscountCourse.getCourseName()+"课程打折之后:"+javaDiscountCourse.getDisCountPrice());}}
1.3总结
从类图可以看出,JavaDiscountCourse类中保留了重写的JavaCourse的getPrice(),而不是直接修改JavaCourse类。