[设计模式] 浅谈依赖倒置原则

2024 年 4 月 16 日 星期二
/ ,
6

阅读此文章之前,你可能需要首先阅读以下的文章才能更好的理解上下文。

[设计模式] 浅谈依赖倒置原则

依赖倒置原则

原则说明: 依赖倒置原则(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接口(抽象)。这样,无论低层模块如何变化,只要接口不变,高层模块就不需要做任何修改。

常见的使用场景

  1. 数据库的连接器。
  2. 通用的支付场景。

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...