使用开闭原则解决实际问题
下面我们以新宝库的教程体系为例,来讲解如何使用开闭原则解决实际问题。
首先创建一个教程接口 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
- 大数据
- 云计算