一、设计模式总览:什么是设计模式、GoF 23种设计模式分类、为什么学习设计模式、本课程学习路线图
1.1 什么是设计模式?——说白了就是“套路”
设计模式这个词,听起来挺高大上的。但说白了,它就是前辈们在长期编码中总结出来的“套路”。
我刚开始写代码那会儿,遇到重复的问题就硬写。后来发现,很多场景下,别人的解法比我优雅得多。设计模式就是这些“优雅解法”的集合。
官方定义是:设计模式是针对特定场景下常见问题的、可复用的解决方案。它不是一个可以直接拷贝的代码片段,而是一套设计思路。
核心要点:
- 设计模式不是框架,不是库,是思想
- 它解决的是“如何组织代码”的问题,不是“如何实现功能”
- 好的设计模式让代码更易读、易改、易扩展
举个例子。你想想看,每次写日志的时候,你是不是只希望有一个日志对象?如果到处 new 一个日志实例,那日志文件就乱套了。这时候,单例模式就派上用场了。我在项目中遇到过好几次因为没控制好实例数量导致的资源冲突,后来统一用单例,问题就解决了。
1.2 GoF 23种设计模式分类
1994年,四位作者(GoF,Gang of Four)出版了《设计模式》这本书。他们总结了23种模式,按目的分为三大类:
| 分类 | 目的 | 包含模式 |
|---|---|---|
| 创建型 | 控制对象的创建过程 | 单例、工厂方法、抽象工厂、建造者、原型 |
| 结构型 | 组合类或对象以形成更大的结构 | 适配器、桥接、组合、装饰、外观、享元、代理 |
| 行为型 | 定义对象间的交互与职责分配 | 责任链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者 |
我个人习惯把这23种模式记成三组:怎么创建对象、怎么搭结构、怎么通信协作。你想想看,软件开发中遇到的大部分问题,基本都能归到这三类里。
小技巧: 不要试图一次性记住所有模式。我建议你先掌握最常用的5-6个:单例、工厂、观察者、策略、装饰、适配器。剩下的遇到具体场景再查就行。
1.3 为什么学习设计模式?
这个问题我问过自己很多次。说实话,刚入行那两年,我觉得设计模式就是花架子。直到有一次,我接手了一个遗留系统——代码里到处都是 if-else,一个类几千行,改一个功能要动十几个文件。那感觉,就像在雷区里走路。
后来我重构了那个系统,用工厂模式替换了散落的创建逻辑,用观察者模式解耦了事件处理,用策略模式替代了冗长的条件分支。代码量减少了40%,可读性提升了一个档次。
所以,学习设计模式的理由其实很实在:
- 提升代码质量:减少重复代码,提高内聚性,降低耦合度
- 提高沟通效率:你说“这里用观察者模式”,大家秒懂,不用解释半天
- 降低维护成本:好的设计模式让修改变得安全,不会牵一发动全身
- 面试加分项:这个不用我多说,你懂的
避坑指南: 我曾经见过有人为了用设计模式而用设计模式,一个简单的功能硬套了三个模式,结果代码比原来还复杂。记住:设计模式是工具,不是目的。不要为了用模式而用模式。
1.4 本课程学习路线图
这门课我们聚焦三个最核心、最实用的模式:单例模式、工厂模式、观察者模式。为什么选这三个?
- 单例模式:最基础,几乎每个系统都会用到。理解它,你就理解了“全局唯一”的设计思想。
- 工厂模式:最实用,帮你解决“谁来创建对象”的问题。我几乎在每个项目中都用它。
- 观察者模式:最经典,事件驱动架构的基石。前端、后端、移动端,无处不在。
下面是本章的知识体系图,帮你快速建立整体认知:
嗯,这张图基本概括了我们的学习路径。先建立整体认知,再深入每个模式。每个模式我都会从定义、结构、适用场景、代码实现、优缺点五个维度来讲。
我个人建议你按照这个顺序来学:单例 → 工厂 → 观察者。因为单例最简单,工厂帮你理解“创建”的抽象,观察者则涉及对象间的通信。循序渐进,效果最好。
学习建议: 每学完一个模式,立刻写一个最小可运行的示例。不要只看不练。我见过太多人“看懂了”但写不出来。代码这东西,手熟了才是自己的。
好了,设计模式总览就讲到这里。接下来我们进入第一个模式——单例模式。我会从最基础的实现讲起,然后逐步深入到线程安全、性能优化等进阶话题。
公众号:蓝海资料掘金营,微信deep3321