登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
VIP网盘
VIP申请
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
依赖倒置 DIP、依赖注入 DI、控制反转 IoC 和工厂模式 ...
依赖倒置 DIP、依赖注入 DI、控制反转 IoC 和工厂模式
[ 复制链接 ]
瞧蛀
2025-6-4 20:35:22
1. 依赖倒置
依赖倒置原则(Dependency Inversion Principle, DIP)是 SOLID 原则中的一项,其
核心思想
是通过
抽象
解耦高层模块和低层模块,使
二者都依赖于抽象而非具体实现
。
依赖反转/倒置的体现
:传统依赖方向是高层模块直接调用低层模块,在源码级别上高层模块依赖低层细节模块。而 DIP 通过抽象反转这种依赖关系,使低层模块的实现在源码级别上依赖高层定义的抽象(
视为高层模块的一部分
)。
1.1 依赖倒置原则的核心
高层模块不直接依赖低层模块
,二者都应依赖抽象(接口或抽象类,接口由高层模块定义,视为高层模块的一部分)。
抽象不依赖细节
,细节(具体实现)应依赖抽象。
1.2 依赖倒置指导方针
变量不可以持有具体类的引用——改用工厂,
避免直接使用 new 持有具体类的引用(new 具体类的操作都封装到工厂中)
不要让类派生自具体类——派生自抽象类或接口,这样就不依赖具体类了
不要覆盖基类中已经实现的方法——如果这样,说明不是一个真正适合被继承的抽象
1.3 示例
场景
高层模块 ReportGenerator 需要生成报告,依赖数据获取功能。
低层模块 MySQLDatabase 和 SQLiteDatabase 提供具体的数据操作。
传统实现(未遵循 DIP)
[code]// 低层模块:直接依赖具体实现class MySQLDatabase {public: void connect() { /* MySQL 连接逻辑 */ } std::string fetchData() { return "MySQL 数据"; }};// 高层模块直接依赖低层具体类class ReportGenerator {private: MySQLDatabase db; // 直接依赖具体实现public: void generateReport() { db.connect(); auto data = db.fetchData(); std::cout
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
瞧蛀
2025-6-4 20:35:22
关注
0
粉丝关注
12
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
黎瑞芝
9990
杭环
9988
4
猷咎
9988
5
凶契帽
9988
6
接快背
9988
7
氛疵
9988
8
恐肩
9986
9
虽裘侪
9986
10
里豳朝
9986
查看更多