SOLID - 依赖倒置原则(Dependency Inversion Principle)
定义
依赖倒置原则(Dependency Inversion Principle,DIP)是面向对象设计中的五大基本原则之一,通常缩写为SOLID中的D。DIP由Robert C. Martin提出,其核心思想是:
Depend upon abstractions, not concretions.
依赖倒置原则主要体现在以下两个方面:
- 高层模块不应依赖于低层模块,两者都应该依赖于抽象。
- 抽象不应该依赖于细节,细节应该依赖于抽象。
通过遵循依赖倒置原则,可以使得系统架构更加稳定、灵活和易于维护。
使用情境
依赖倒置原则主要应用在以下情境中:
- 模块化设计:在模块化设计中,通过依赖抽象,提升模块的重用性和灵活性。
- 插件架构:在插件架构中,不同插件通过抽象接口进行通信,实现松耦合。
- 依赖注入:通过依赖注入(Dependency Injection,DI)实现依赖倒置,有助于提高代码的可测试性和可维护性。
示例
以下是一个不遵循依赖倒置原则的示例:
不遵循依赖倒置原则的设计
class MySqlDatabase {
public void connect() {
// MySQL数据库连接逻辑
}
}
class DataService {
private MySqlDatabase mySqlDatabase;
public DataService() {
this.mySqlDatabase = new MySqlDatabase();
}
public void getData() {
mySqlDatabase.connect();
// 获取数据逻辑
}
}
在这个设计中,DataService
类直接依赖于具体的MySqlDatabase
类。当需要更换数据库实现时,必须修改DataService
类的代码。
遵循依赖倒置原则的设计
为了消除这种依赖,可以引入一个抽象接口:
interface Database {
void connect();
}
class MySqlDatabase implements Database {
public void connect() {
// MySQL数据库连接逻辑
}
}
class OracleDatabase implements Database {
public void connect() {
// Oracle数据库连接逻辑