别再看UML了,我用卡皮巴拉教你学设计模式
前言
还在背 GoF 的 23 种设计模式吗?
单例、工厂、观察者、策略……背了忘,忘了背,面试前猛背一遍,过了又忘。
为什么?因为设计模式是活的思想,不是死的定义。
我做了一个小程序,用漫画 + 闯关的方式把 23 种设计模式讲完了。今天把这套思路整理出来,希望能帮到你。
为什么设计模式这么难学?
大多数教程的讲法是这样的:
定义 + UML 类图 + 代码示例
问题在哪?
UML 类图本身就是门槛。 你还没理解模式,先被 6 个箭头、4 个方框搞晕了。
代码示例脱离场景。 每个例子都是 Duck、Cat、Animal,你知道了,但不知道什么时候该用。
没有反馈。 看完了,不知道自己懂没懂。
换个思路:用故事代替定义
以观察者模式为例。
传统讲法:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
听懂了吗?没有。
漫画讲法:
小爪在森林里开了一家情报站。
每当有新的情报(状态变化),所有的情报员(观察者)都会自动收到通知,不需要小爪一个一个去敲门。
森林情报站(Subject)
↓ 通知
情报员A、情报员B、情报员C(Observer)
核心思想一句话:不要主动问,让变化来找你。
这就是观察者模式的本质:事件驱动,解耦通知者和接收者。
23 种模式,我用了 23 个故事
| 模式 | 故事场景 | 核心思想 |
|---|---|---|
| 单例模式 | 森林里只能有一个情报站长 | 全局唯一实例 |
| 工厂方法 | 小爪开了不同风格的餐厅 | 子类决定创建哪个对象 |
| 抽象工厂 | 小爪的家具店:风格要统一 | 创建一组相关对象 |
| 观察者模式 | 情报站自动通知所有情报员 | 事件驱动、解耦 |
| 策略模式 | 小爪遇到不同怪兽换不同招式 | 算法可以互换 |
| 装饰器模式 | 给小爪穿装备,一层套一层 | 动态扩展功能 |
| 代理模式 | 小爪请了个代理人办事 | 控制访问 |
| 适配器模式 | 把不兼容的接口"翻译"一下 | 让不兼容的能一起工作 |
| ... | ... | ... |
每个模式都不是靠背定义学会的,是靠理解故事 + 在小程序里闯关验证学会的。
小程序里怎么学?
三步:
第一步:看漫画
每个模式对应一集漫画分镜,熊猫导师讲解,狐狸 PM 负责引出问题,卡皮巴拉小爪负责"踩坑"。
第二步:做选择题验证
看完不是结束,要做题。答错了有漫画框提示,答对了解锁下一关。
第三步:在图鉴里复习
所有学过的模式会收集到图鉴里,随时可以回来复习。
适合谁?
- 正在学设计模式、但被 UML 类图劝退的人
- 准备面试、需要快速建立设计模式直觉的人
- 工作了几年、知道设计模式但用不出来的人
怎么体验?
微信搜索 「爪爪代码冒险记」,直接打开小程序。
目前 23 种模式还在持续更新中,欢迎体验并提反馈。
最后
设计模式不是背诵题,是写代码时的直觉。
当你在真实项目里自然而然地想到"这里用个观察者模式会不会更好",那才是真正学会了。
希望我的漫画能帮你建立这种直觉。
祝大家 Coding 愉快 🐾