设计模式_01_开闭原则
文章目录
开闭原则
- 定义:一个软件实体入类、模块和函数应该对扩展开放,对修改关闭
- 用抽象构建框架,用实现扩展细节(面向抽象编程)
- 优点:提高软件系统的可复用性以及可维护性
/**
* @author Mr.superbeyone
* @project design-pattern
* @className Course
* @description Course
* @date 2019-03-15 16:03
**/
public interface Course {
Integer getId();
String getName();
Double getPrice();
}
/**
* @author Mr.superbeyone
* @project design-pattern
* @className JavaCourse
* @description Java Course
* @date 2019-03-15 16:04
**/
public class JavaCourse implements Course {
private Integer id;
private String name;
private Double price;
public JavaCourse(Integer id, String name, Double price) {
this.id = id;
this.name = name;
this.price = price;
}
@Override
public Integer getId() {
return this.id;
}
@Override
public String getName() {
return this.name;
}
@Override
public Double getPrice() {
return this.price;
}
}
/**
* @author Mr.superbeyone
* @project design-pattern
* @className JavaDiscountCource
* @description JavaCourse扩展类
* @date 2019-03-15 16:13
**/
public class JavaDiscountCource extends JavaCourse {
public JavaDiscountCource(Integer id, String name, Double price) {
super(id, name, price);
}
public Double getOriginPrice() {
return super.getPrice();
}
@Override
public Double getPrice() {
return super.getPrice() * 0.8;
}
}
public class Test {
private static Logger logger = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
Course javaCourse = new JavaDiscountCource(92, "Java从入门到放弃", 100d);
logger.info("编号:{},课程名称:{},原售价格:{},现售价格{}", javaCourse.getId(), javaCourse.getName(), ((JavaDiscountCource) javaCourse).getOriginPrice(), javaCourse.getPrice());
}
}
类图结构:
执行结果:
源码地址