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

1.3总结

从类图可以看出,JavaDiscountCourse类中保留了重写的JavaCourse的getPrice(),而不是直接修改JavaCourse类。
更多推荐



所有评论(0)