依赖倒置原则详解(定义核心及类图案例)

依赖倒置原则详解(定义核心及类图案例)-mikechen

依赖倒置原则是设计模式六大原则之一,非常的重要,下面我就重点来详解依赖倒置原则@mikechen

什么是依赖倒置原则

依赖倒置原则,全称是Dependence Inversion Principle,简称DIP,是面向对象设计中的一条基本原则。

 

依赖倒置原则的作用

依赖倒置原则的主要作用是降低代码之间的耦合度,提高代码的可扩展性和可维护性,它也是其他一些设计原则的基础,如开闭原则、单一职责原则、里氏替换原则等。

 

依赖倒置原则的核心

依赖倒置原则核心思想是:高层模块和低层模块都应该依赖于抽象,即高层模块不应该依赖于低层模块的具体实现,而是应该依赖于低层模块所定义的抽象接口或抽象类。

具体来说,抽象指的是:接口或抽象类,而底层模块和高层模块都应该依赖于这些抽象,而不是依赖于具体实现。

这种依赖关系的反转使得高层模块和底层模块之间的耦合度大大降低,同时也使得代码更加灵活、可扩展、可维护和可测试。

 

依赖倒置原则的类图

依赖倒置原则的类图,如下所示:

+----------------+       +-------------------+
|    HighLevel   |       |    LowLevel       |
|----------------|       |-------------------|
|  -dependency   |<----->|  +dependency      |
+----------------+       +-------------------+

在这个类图中,HighLevel表示高层模块,LowLevel表示低层模块。

  • HighLevel中有一个名为dependency的私有成员变量,它是一个抽象类或者接口类型,代表HighLevel依赖于LowLevel提供的服务。
  • LowLevel中也有一个名为dependency的公共成员变量,它是一个抽象类或者接口类型,代表LowLevel提供的服务。

通过这个类图,可以看出依赖倒置原则的核心思想:高层模块依赖于抽象,而不是依赖于具体的低层模块。

这样可以实现高层模块和低层模块之间的解耦,提高代码的可维护性、可扩展性和可重用性。

 

依赖倒置原则的例子

下面是一个简单的示例代码:

// 订单数据接口
public interface OrderData {
    void saveOrder(Order order);
}

// 数据库模块实现订单数据接口
public class DatabaseOrderData implements OrderData {
    public void saveOrder(Order order) {
        // 实现订单保存到数据库的逻辑
    }
}

// 订单管理模块
public class OrderManager {
    private OrderData orderData;

    // 通过构造函数注入订单数据接口的具体实现
    public OrderManager(OrderData orderData) {
        this.orderData = orderData;
    }

    public void placeOrder(Order order) {
        // 订单处理逻辑
        orderData.saveOrder(order); // 调用注入的具体实现来保存订单数据
    }
}

在这个例子中,订单管理模块通过构造函数注入订单数据接口,即OrderData,而不是直接依赖于DatabaseOrderData实现类。

这样,订单管理模块只依赖于抽象的订单数据接口,具体的数据库模块只需要实现这个接口即可,实现了高层模块与底层模块之间的解耦。

以上就是依赖倒置原则详解,更多设计模式原则请查看:设计模式六大原则详解(通俗易懂)

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法