使用开闭原则解决实际问题
下面我们以新宝库的教程体系为例,来讲解如何使用开闭原则解决实际问题。
首先创建一个教程接口 ICourse,代码如下:
那么如何在不修改原有代码的前提下,实现价格优惠这个功能呢?我们可以添加一个处理优惠逻辑的类,即 JavaDiscountCourse 类,代码如下:
从图中可以看出,JavaDiscountCourse 中保留了覆盖 JavaCourse 的 getPrice() 方法,而不是直接修改 JavaCourse 类。
首先创建一个教程接口 ICourse,代码如下:
public interface ICourse {
Integer getId();
String getName();
Double getPrice();
}
新宝库上的教程有 C语言、C++、Java、Python 等。下面创建一个 Java 教程的类 JavaCourse。
public class JavaCourse implements ICourse {
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;
}
}
现在要给 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.8;
}
}
类图如下图所示。

所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算