开闭原则与依赖倒置原则区别:原类不变,新增类(功能)vs 接口类不变,原实现类可变

好,我来用最通俗的方式 ,用角色扮演 + 场景对话不讲术语,让你彻底明白「依赖倒置原则」和「开闭原则」的区别。


🎭 场景:你是老板(高层),你要雇人做事


一、【依赖倒置原则】像是:

你(老板)不直接招某个具体的人,而是找中介说:我要一个会画画的人

  • ✅ 你不管是"张三"来画,还是"李四"来画;
  • ✅ 你只要求:对方能实现 画画() 这个动作;
  • ✅ 换人不需要你改流程。

关键词:我不依赖"某个人",我只依赖"会画画"这个能力。


二、【开闭原则】像是:

你以后要多做几种事,比如画画 + 写代码 + 做策划,你不重写流程,而是新增岗位

  • ✅ 原来的"画画流程"不动;
  • ✅ 新建一个"写代码岗位",加入就行;
  • ✅ 老流程一点不动。

关键词:我不动旧流程,只新增角色就能扩展能力。


🧠 总结用词(极简版)

术语 本质 类比
依赖倒置原则 "我不找人,我找能力" 老板说:我只找'会干活的人'
开闭原则 "我不改旧流程,我加新流程" 老板说:原来只画画,现在再加个写代码的人

🧪 用 Python 再演一遍

✅ 依赖倒置原则

python 复制代码
class Person(ABC):
    @abstractmethod
    def work(self): pass

class Painter(Person):
    def work(self): print("🎨 画画")

class Coder(Person):
    def work(self): print("💻 写代码")

class Boss:
    def assign_work(self, p: Person):
        p.work()

# 老板不关心你是谁,只管你会不会 work()
boss = Boss()
boss.assign_work(Painter())  # 输出:🎨 画画
boss.assign_work(Coder())    # 输出:💻 写代码

你看,Boss(高层)只看接口,不依赖具体类


✅ 开闭原则

python 复制代码
class Person(ABC):
    @abstractmethod
    def work(self): pass

class Painter(Person):
    def work(self): print("🎨 画画")

# 以后加新需求,不改 Painter,只加新类
class Coder(Person):
    def work(self): print("💻 写代码")

原来的 Painter 类没动,新增 Coder 类就能拓展功能,开闭原则 ✅


🎯 最后用最简单话讲两者区别

问题 依赖倒置原则解决 开闭原则解决
"我要和谁合作?" 和接口合作,不直接找具体人
"我以后要加功能怎么办?" 不改原代码,扩展新模块
"我要换人怎么办?" 换人不换流程(只要接口兼容)

如果你还迷糊,不妨这样记:

依赖倒置 = 找能力;开闭原则 = 加人干新活。


需要我再用一个小游戏、支付系统、或微服务场景帮你「角色扮演实战」吗?讲起来会更容易理解~

相关推荐
腾科IT教育5 天前
Oracle OCP 认证考试到底怎么考?(附备考路线)
数据库·oracle·开闭原则·ocp认证·ocp培训
开开心心_Every7 天前
实用PDF擦除隐藏信息工具,空白处理需留意
运维·服务器·网络·pdf·电脑·excel·依赖倒置原则
WarrenMondeville17 天前
2.Unity面向对象- 开闭原则
unity·游戏引擎·开闭原则
WarrenMondeville17 天前
5.Unity面向对象-依赖倒置原则
unity·设计模式·依赖倒置原则
爱学习 爱分享19 天前
什么是开闭原则
开闭原则
曹牧19 天前
OOP:开闭原则
开闭原则
养生技术人20 天前
Oracle OCP认证考试题目详解082系列第5题
运维·数据库·sql·oracle·开闭原则
开开心心就好20 天前
安卓免费证件照制作软件,无广告弹窗
linux·运维·安全·pdf·迭代器模式·依赖倒置原则·1024程序员节
kylezhao20192 个月前
C# 的开闭原则(OCP)在工控上位机开发中的具体应用
网络·c#·开闭原则
PuEJbfWWgo2 个月前
谐波电流注入应用于电机控制器 附带电机谐波抑制说明文档 注:为解决汽车NvH而开发,旨在消除转矩谐波
开闭原则