参考:Spring5核心原理与30个类手写实战
开闭原则(Open-Closed)是指一个软件实体(如类,模块和函数)应该对扩展开放,对修改关闭.所谓的开闭,正是对扩展和修改两个行为的一个原则.它强调的是用抽象构建架构,用实现扩展细节,可以提高软件系统的可复用性和可维护性,开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定,灵活的系统.例如版本更新,我们尽可能不修改源代码,但可以增加新功能.
开闭原则的核心思想就是面向抽象编程.例如: 以课程体系为例,首先创建一个课程接口:
public interface Icourse {
Integer getId();
String getName();
Double getPrice();
}
整个课程有java架构,大数据,AI,前端,软件测试等,下面创建一个java架构课程的类JavaCourse:
public class JavaCourse implements Icourse {
private Integer Id;
private String name;
private Double price;
public JavaCourse(Integer id, String name, Double price) {
Id = id;
this.name = name;
this.price = price;
}
@Override
public Integer getId() {
return Id;
}
@Override
public String getName() {
return name;
}
@Override
public Double getPrice() {
return price;
}
}
现在需求是给Java架构课程做活动,价格优惠.如果修改JavaCourse中的getPrice()方法,则存在一定的风险,可能影响其他地方的调用结果.我们如何在不修该原有代码的前提下,实现价格优惠这个功能呢?现在,我们再编写一个处理优惠逻辑的类JavaDiscountCourse
public class JavaDiscountCourse extends JavaCourse{
public JavaDiscountCourse(Integer id, String name, Double price) {
super(id, name, price); //调用父类的构造方法
}
public Double getOriginPrice(){
return super.getPrice();
}
//打折
public Double getPrice(){
return super.getPrice() * 0.88;
}
}