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

Java依赖倒置原则如何应用_OOP架构设计逻辑讲解

夏丽姑娘_6109

夏丽姑娘_6109

发布时间:2025-12-31 16:30:09

|

839人浏览过

|

来源于php中文网

原创

依赖倒置原则(DIP)要求模块依赖抽象(接口或抽象类)而非具体实现,由高层模块定义接口、外部容器(如Spring)注入具体实例,从而隔离变化、提升可测试性与可维护性。

java依赖倒置原则如何应用_oop架构设计逻辑讲解

依赖倒置原则(DIP)不是“让代码少用 new”,而是把谁决定具体类型这件事,从实现细节里抽出来,交给更稳定、更抽象的一方来控制。

依赖抽象,而不是具体实现

核心是:模块之间不直接依赖具体类,而依赖接口或抽象类。这样当具体实现变化时,调用方不用改。

  • 比如日志功能,不要写 new FileLogger() 或 new DbLogger(),而是定义一个 Logger 接口,让业务类依赖它
  • 具体用哪种日志方式,由外部(如配置、工厂、Spring 容器)决定,业务逻辑完全不知道也不关心
  • 接口要由高层模块(稳定需求)定义,不是底层模块(易变实现)来定——避免抽象被实现牵着走

通过构造注入/方法注入解耦依赖

把具体实现的创建和使用分开。创建交给外部,使用只面向接口。

  • 构造函数传入依赖是最常见、最清晰的方式:public OrderService(Logger logger)
  • 避免在类内部 new 实例,也别用静态工具类强绑定(如 LogUtil.info()),那等于硬编码依赖
  • 单元测试时,可直接传入 MockLogger,无需启动文件系统或数据库

结合 Spring 等框架自然落地

现代 Java 项目中,DIP 往往不靠手写工厂,而是靠 IoC 容器自动完成依赖装配。

Alibabacloud Sdk Client Initialization For Java
Alibabacloud Sdk Client Initialization For Java

在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。

下载

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

  • 声明 @Service 和 @Repository,用 @Autowired 注入接口,Spring 自动匹配并注入具体 Bean
  • 切换实现只需改配置或加个 @Primary,甚至运行时通过 Profile 切换(如 dev 用 ConsoleLogger,prod 用 KafkaLogger)
  • 关键仍是:你的业务类里不能出现 new XxxServiceImpl(),也不能 import 具体实现类

警惕“伪抽象”和过度设计

不是所有地方都要接口+实现两层。DIP 是为应对变化,不是为抽象而抽象。

  • 如果某个类确定永远只有一种实现(比如一个简单的 DTO 工具类),强行抽接口反而增加维护成本
  • 接口方法要聚焦职责,别为了“看起来像抽象”堆一堆空方法,或让接口承担多个不相关的角色
  • 判断标准很简单:这个依赖未来是否可能换?换了会不会影响调用方?如果答案是否定的,就先别倒置

基本上就这些。DIP 的本质不是语法技巧,而是把变化点隔离出来,让稳定的部分控制不稳定的部分。写的时候多问一句:“如果明天要换掉这个组件,我得改几处?”——改得越少,说明倒置得越到位。

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

WorkBuddy

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

豆包大模型

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

讯飞绘文

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

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

UpDream
UpDream Hot

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

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

DeepSeek

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

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

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

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

2211

2025.08.06

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

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

417

2026.01.26

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

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

3048

2023.10.19

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

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

4329

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3689

2025.12.29

java接口相关教程
java接口相关教程

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

386

2026.01.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

4747

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2148

2023.08.10

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

120

2026.09.23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

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

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