开闭原则是面向对象设计中最基本、最重要的原则之一。它的定义为:一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。
Java设计模式七大原则之开闭原则详解
什么是开闭原则
开闭原则是面向对象设计中最基本、最重要的原则之一。它的定义为:一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。
开闭原则的作用
开闭原则的作用在于,提高代码的可维护性和可扩展性,降低修改代码时的风险,以应对不断变化的需求。在使用开闭原则的代码中,当需要增加新的功能时,无需修改原有的代码,只需添加新的代码模块即可。
开闭原则的实现方式
具体来说,开闭原则的实现方式有两种:
1. 抽象设计
使用抽象设计的方式,使得代码具有较大的可扩展性,在增加新的功能时,只需增加新的具体实现即可,而不必更改原有的抽象代码结构。
例如,当需要增加一个新的具体产品时,可以创建一个新的ConcreteProduct类,并实现其Product接口。这样就可以在不改变原有代码的情况下,新增一个具体实现了。
interface Product {
void show();
}
class ConcreteProduct1 implements Product {
@Override
public void show() {
System.out.println("Product1");
}
}
class ConcreteProduct2 implements Product {
@Override
public void show() {
System.out.println("Product2");
}
}
//新增功能时无需修改原有代码
class ConcreteProduct3 implements Product {
@Override
public void show() {
System.out.println("Product3");
}
}
2. 开闭模块
使用开闭模块的方式,使得代码结构中所有的模块间都是相对独立的。在增加新的功能时,只需添加新的模块即可,而不必更改原有模块间的关系。
例如,在一个简单的计算器程序中,可以实现加减乘除四个基本操作的模块,并且它们相互独立。
interface Operation {
double getResult(double num1, double num2);
}
class AddOperation implements Operation {
@Override
public double getResult(double num1, double num2) {
return num1 + num2;
}
}
class SubtractOperation implements Operation {
@Override
public double getResult(double num1, double num2) {
return num1 - num2;
}
}
class MultiplyOperation implements Operation {
@Override
public double getResult(double num1, double num2) {
return num1 * num2;
}
}
class DivideOperation implements Operation {
@Override
public double getResult(double num1, double num2) {
if (num2 == 0) {
throw new ArithmeticException("除数不能为0");
}
return num1 / num2;
}
}
在用户需要使用到某个操作时,只需添加其对应的模块即可,如:
class User {
public static void main(String[] args) {
Operation operation = new MultiplyOperation();
double result = operation.getResult(10, 20);
System.out.println(result);
}
}
//在新增模块时,不必修改原有模块间的关系
class SquareOperation implements Operation {
@Override
public double getResult(double num1, double num2) {
return Math.pow(num1, num2);
}
}
总结
在面向对象设计中,开闭原则是一种非常重要的设计模式,它能够提高代码的可维护性和可扩展性,降低修改代码时的风险。在实现开闭原则时,我们可以使用抽象设计或开闭模块的方式。同时,我们可以通过审视现有的代码结构,找到其中可能形成修改风险的一些地方,并加以改进,以达到更好地遵循开闭原则的目的。
本文标题为:Java设计模式七大原则之开闭原则详解


- Java中JDBC的使用教程详解 2023-01-24
- jsp获取action传来的session和session清空以及判断 2023-12-29
- java.nio.file.WatchService 实时监控文件变化的示例代码 2022-11-25
- 结合线程池实现apache kafka消费者组的误区及解决方法 2023-02-19
- java实现登录注册界面 2023-01-13
- 是否可以将基本JDBC SQL类型映射到Java类? 2023-10-31
- java – 如何创建一个通知服务器,在数据库发生变化时通知Delphi应用程序? 2023-11-04
- SpringBoot打jar包遇到的xml文件丢失的解决方案 2024-01-30
- Java实现多线程大批量同步数据(分页) 2023-04-07
- SpringMVC使用ResponseEntity实现文件上传下载 2022-11-20