开闭原则 (Open-Closed Principle, OCP) : 一个软件实体(类,模块,函数之类的) 应该对扩展开放,对修改关闭
- 强调的是用抽象构建框架, 实现扩展细节,提高系统的可复用性及可维护性
- 面向对象设计中最基本的设计原则
- 其核心思想就是面向抽象编程
简单图书课程管理设计
首先创建一个读书课程接口
public interface ICourse {
Long getId();
String getName();
Double getPrice();
}
创建一个实现类
public class ScienceCourse implements ICourse {
private Long id;
private String name;
private Double price;
public ScienceCourse(Long id, String name, Double price) {
this.id = id;
this.name = name;
this.price = price;
}
@Override
public Long getId() {
return id;
}
@Override
public String getName() {
return name;
}
@Override
public Double getPrice() {
return price;
}
}
赶上节假日,做活动, 价格打一折,如果直接在ScienceCourse 类中修改方法getPrice可能会导致其他引用到这个方法的地方出现问题,如何做到不修改此处而做到打折呢?
在新建一个之类,通过子类来重写父类方法,做到开放封闭.
public class ScienceDiscountCourse extends ScienceCourse{
public Double getOriginPrice(){
return super.getPrice() * 0.1;
}
public ScienceDiscountCourse(Long id, String name, Double price) {
super(id, name, price);
}
}
类结构图如下