什么是依赖倒置原则

依赖倒置原则(Dependency Inversion Principle, DIP)是面向对象设计原则之一,它是SOLID原则中的"D"。依赖倒置原则的核心思想是高层策略性业务规则不应该依赖于低层的具体实现细节,而两者都应该依赖于抽象。

依赖倒置原则主要包含两个基本点:

  1. 抽象不应该依赖于细节:系统中的抽象层(高层模块)不应当依赖于具体实现(低层模块),而是两者都应该依赖于抽象(如接口或抽象类)。

  2. 细节应该依赖于抽象:具体的实现应该依赖于抽象,这样在不修改抽象层代码的情况下,可以替换或修改具体的实现。

依赖倒置原则的优点包括:

  • 降低耦合度:由于模块间的依赖是基于抽象的,因此减少了模块间的直接依赖,降低了耦合度。
  • 提高模块化:系统更容易被分解为可复用的模块,因为模块间的交互是通过抽象接口进行的。
  • 增强灵活性:更换或升级系统的某个部分变得更加容易,因为具体实现可以独立于高层策略进行变化。

    这边整理了一份核心Java面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

     需要全套面试笔记的【点击此处即可】免费获取

在实际应用中,依赖倒置原则可以通过以下方式实现:

  • 使用接口或抽象类定义系统组件之间的契约。
  • 通过依赖注入(Dependency Injection, DI)将具体实现注入到需要它们的对象中,而不是让对象自己创建或查找这些实现。
  • 避免在高层模块中直接使用具体类,而是通过抽象来引用。

依赖倒置原则是实现开闭原则(Open/Closed Principle)的基础,即软件实体应该对扩展开放,对修改关闭。通过依赖倒置,我们可以更容易地扩展系统功能,而不需要修改现有的代码。

下面来看一个简单的Java代码示例,让我们更好的理解依赖倒置原则的应用:

首先,我们定义一个抽象接口,表示一个可以发送消息的系统:

 

java

代码解读

复制代码

public interface MessageService { void sendMessage(String message); }

然后,我们创建一个具体的发送服务实现这个接口:

 

java

代码解读

复制代码

public class EmailService implements MessageService { @Override public void sendMessage(String message) { System.out.println("Sending email: " + message); } }

接下来,我们有一个高层策略类,它使用MessageService接口而不是具体的EmailService类:

 

java

代码解读

复制代码

public class NotificationService { private MessageService messageService; // 构造函数注入依赖 public NotificationService(MessageService messageService) { this.messageService = messageService; } public void notifyUser(String message) { // 依赖于抽象,而不是具体实现 messageService.sendMessage(message); } }

最后,我们可以在客户端代码中使用这个系统:

 

java

代码解读

复制代码

public class Client { public static void main(String[] args) { // 创建具体的消息服务 MessageService emailService = new EmailService(); // 将具体的消息服务注入到高层策略中 NotificationService notificationService = new NotificationService(emailService); // 使用高层策略发送消息 notificationService.notifyUser("Hello, this is a test email."); } }

在这个例子中,NotificationService类是一个高层策略类,它依赖于MessageService接口的抽象。我们通过构造函数注入具体的消息服务EmailService。这样,如果将来我们需要更换消息服务的实现(比如使用SmsService),我们只需要创建一个新的实现类并注入到NotificationService中,而不需要修改NotificationService的代码。这就体现了依赖倒置原则的精神。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值