[设计模式] 浅谈依赖倒置原则
依赖倒置原则
原则说明: 依赖倒置原则(Dependency Inversion Principle,DIP),高层模块不应该依赖于低层模块,两者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。
为什么要遵守该原则
通过依赖抽象(接口或抽象类)可以用来降低类之间的耦合度,提高系统的可扩展性和可维护性。
用一个简单的例子说明
// 抽象类或接口
public interface Reader {
String read();
}
// 低层模块
public class FileReader implements Reader {
@Override
public String read() {
return "读取文件内容";
}
}
public class DatabaseReader implements Reader {
@Override
public String read() {
return "读取数据库内容";
}
}
// 高层模块
public class ContentViewer {
private Reader reader;
// 通过构造函数或者setter方法,将低层模块的实现注入到高层模块
public ContentViewer(Reader reader) {
this.reader = reader;
}
public void displayContent() {
System.out.println(reader.read());
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
Reader fileReader = new FileReader();
ContentViewer contentViewer = new ContentViewer(fileReader);
contentViewer.displayContent(); // 输出 "读取文件内容"
Reader dbReader = new DatabaseReader();
contentViewer = new ContentViewer(dbReader);
contentViewer.displayContent(); // 输出 "读取数据库内容"
}
}
ContentViewer(高层模块)并不直接依赖于FileReader或DatabaseReader(低层模块),而是依赖于Reader接口(抽象)。这样,无论低层模块如何变化,只要接口不变,高层模块就不需要做任何修改。
常见的使用场景
- 数据库的连接器。
- 通用的支付场景。