讲师中心 微信公众号
AI工具推荐 视频效率加速

Java面向对象设计中依赖倒置是什么_依赖倒置在Java中的实现解析

风涛吖_3386

风涛吖_3386

发布时间:2025-12-22 18:42:48

|

666人浏览过

|

来源于php中文网

原创

依赖倒置原则要求高层模块和低层模块都依赖抽象,抽象不依赖细节;Java中通过接口或抽象类定义抽象,由外部注入具体实现来解耦,如UserService依赖UserRepository接口而非其实现类。

java面向对象设计中依赖倒置是什么_依赖倒置在java中的实现解析

依赖倒置(Dependency Inversion Principle,DIP)是面向对象设计中SOLID五大原则之一,核心思想是高层模块不应依赖低层模块,二者都应依赖抽象;抽象不应依赖细节,细节应依赖抽象。在Java中,它不是语法特性,而是一种设计指导思想,通过接口、抽象类等抽象机制来解耦模块间的依赖关系。

为什么需要依赖倒置?

不遵守依赖倒置时,常见写法是高层类直接new低层类实例:

❌ 反例(紧耦合):
class UserService {
    private MySQLUserRepository repository = new MySQLUserRepository(); // 直接依赖具体实现
}

这样会导致:数据库换为Redis或MongoDB时,必须修改UserService;单元测试难以Mock;可维护性和可扩展性差。

如何用Java实现依赖倒置?

关键在于将“依赖具体实现”改为“依赖抽象”,再通过外部注入具体实现:

deep-java-review
deep-java-review

Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...

下载

立即学习“Java免费学习笔记(深入)”;

  • 定义接口(抽象)描述行为,如UserRepository
  • 让低层模块实现该接口(如MySQLUserRepository、RedisUserRepository)
  • 高层模块(如UserService)只持有接口类型字段,并通过构造器/Setter注入具体实现
  • 依赖关系由外部(如Spring容器、工厂类或测试代码)控制,而非在类内部硬编码

✅ 正例(符合DIP):

interface UserRepository {
    User findById(Long id);
}
<p>class MySQLUserRepository implements UserRepository { /<em> ... </em>/ }
class RedisUserRepository implements UserRepository { /<em> ... </em>/ }</p><p>class UserService {
private final UserRepository repository; // 依赖抽象,不关心谁实现</p><pre class="brush:php;toolbar:false;">public UserService(UserRepository repository) { // 构造注入
    this.repository = repository;
}

}

依赖倒置 ≠ 依赖注入,但常配合使用

依赖倒置是设计原则,强调“谁依赖谁”的方向;依赖注入(DI)是实现手段,解决“怎么把依赖给进来”的问题。Spring框架的@Autowired、构造器注入等,都是落实依赖倒置的常用方式。但即使不用Spring,手动传入实现类(比如测试时传入Mock对象),也已体现DIP思想。

常见误区提醒

  • 误以为“用了接口就自动满足DIP”——若高层仍自己new实现类,只是形式上用了接口,本质仍是依赖细节
  • 过度抽象:不是每个类都要抽接口,只对可能变化或需替换的部分(如数据源、支付渠道、通知方式)抽象
  • 混淆依赖倒置与控制反转(IoC):IoC是更广的概念,DI是IoC的一种,DIP是指导IoC/DI如何设计的准则

热门AI工具

更多
UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2291

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

437

2026.01.26

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

5495

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

302

2025.11.27

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

304

2026.04.09

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

203

2026.04.17

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3068

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

4409

2025.10.17

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

0

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 178人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 282人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn