首页 > Java > java教程 > 正文

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

P粉602998670
发布: 2025-12-22 18:42:48
原创
646人浏览过
依赖倒置原则要求高层模块和低层模块都依赖抽象,抽象不依赖细节;Java中通过接口或抽象类定义抽象,由外部注入具体实现来解耦,如UserService依赖UserRepository接口而非其实现类。

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

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

为什么需要依赖倒置?

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

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

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

如何用Java实现依赖倒置?

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

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

VALL-E
VALL-E

VALL-E是一种用于文本到语音生成 (TTS) 的语言建模方法

VALL-E 142
查看详情 VALL-E
  • 定义接口(抽象)描述行为,如UserRepository
  • 让低层模块实现该接口(如MySQLUserRepositoryRedisUserRepository
  • 高层模块(如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如何设计的准则

以上就是Java面向对象设计中依赖倒置是什么_依赖倒置在Java中的实现解析的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号