开闭原则与依赖倒置原则区别:原类不变,新增类(功能)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 类就能拓展功能,开闭原则 ✅


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

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

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

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


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

相关推荐
小白考证进阶中6 天前
0基础可以考MySQL OCP么?备考时间需要多久?
数据库·mysql·开闭原则
一只栖枝7 天前
关于OCP认证:有Oracle和MySQL两种
数据库·mysql·oracle·开闭原则·数据管理·ocp认证
博睿谷IT99_8 天前
数据库证书可以选OCP认证吗?
数据库·oracle·开闭原则·ocp认证
博睿谷IT99_11 天前
Oracle 19c新特性:OCP认证考试与职业跃迁的关键?
数据库·oracle·开闭原则
龙仔72511 天前
compat-openssl10和libnsl下载安装
ssl·依赖倒置原则·opentsdb
居然是阿宋11 天前
Android RecyclerView 多布局场景下的设计思考:SRP 与 OCP 的权衡与优化
android·开闭原则·单一职责原则
一只栖枝16 天前
OCP证书有效期是永久,但需要更新
数据库·开闭原则·ocp·oracle认证·ocp培训·ocp证书
一只栖枝19 天前
Oracle OCP知识点详解3:使用 vim 编辑文件
oracle·vim·开闭原则·技巧·ocp
冷雨夜中漫步20 天前
设计模式(8)——SOLID原则之依赖倒置原则
设计模式·依赖倒置原则·设计规范