本片文章在springBoot3,jdk21下测试通过
1.定义:对扩展开放,对修改关闭
2.开闭原则到底解决了什么问题?
3.用代码来列举一个案例
需求:我们有一个计算器类,最初只支持加法操作
大多数程序员都会使用的方式,也就是未遵循开闭原则的代码,如下:
public class JiSuanQi {
public double init(String operation, double num1, double num2) {
if ("add".equals(operation)) {
return num1 + num2;
} else {
throw new IllegalArgumentException("错误");
}
}
}
更改需求:我们需要添加减法操作
public class JiSuanQi {
public double init(String operation, double num1, double num2) {
if ("add".equals(operation)) {
return num1 + num2;
} else if ("subtract".equals(operation)) { // 新增代码
return num1 - num2; // 新增代码
} else {
throw new IllegalArgumentException("错误");
}
}
}
现在采用遵循开闭原则的例子
public interface Operation {
double perform(double num1, double num2);
}
public class Addition implements Operation {
@Override
public double perform(double num1, double num2) {
return num1 + num2;
}
}
public class Subtraction implements Operation {
@Override
public double perform(double num1, double num2) {
return num1 - num2;
}
}
需求更改:添加一个乘法的方法
// 当需要添加新的运算如乘法时
public class Multiplication implements Operation {
@Override
public double perform(double num1, double num2) {
return num1 * num2;
}
}
代码类似于标题一中遵循开闭原则的例子,此处就省略
博主曾经写过一篇关于mybatis动态切换数据源的文章有兴趣的博主自行阅读,连接如下:https://blog.csdn.net/weixin_44702984/article/details/134855131?spm=1001.2014.3001.5502
链接直达
下面的案例只是提供思路,代码可以自行完成
1.定义数据访问层接口
public interface DataAccess {
// 获取链接
void connect();
// 执行SQL
void executeQuery(String query);
// 其他通用方法...
}
2.接口实现类
public class MySQLDataAccess implements DataAccess {
// 实现与MySQL相关的connect, executeQuery等方法...
}
public class OracleDataAccess implements DataAccess {
// 实现与Oracle相关的connect, executeQuery等方法...
}
3.主程序使用DataAccess接口
public class Application {
private DataAccess dataAccess;
public void setDataAccess(DataAccess da) {
this.dataAccess = da;
}
public void performDatabaseOperation() {
dataAccess.connect();
dataAccess.executeQuery("...");
}
}