Java 23 种设计模式:从踩坑到精通 ------ 开篇及系列介绍
摘要:设计模式是 Java 工程师从"会用框架"到"读懂框架"的分水岭。本系列将以 GoF 23 种经典设计模式为主线,结合 Java 语言特性与 Spring、MyBatis 等主流框架的源码案例,用通俗的图文和可直接运行的代码,逐一拆解每种模式的原理与最佳实践。本文作为系列开篇,为你梳理模式的起源与分类、六大设计原则、完整学习路线和文章目录,帮你建立起一套可复用的设计直觉。
📖 《Java 23 种设计模式:从踩坑到精通》
1. 为什么你必须懂设计模式?
你是否遇到过这样的场景:
- 业务代码越写越长,if-else 嵌套到怀疑人生,想重构却不知从哪下手;
- 读 Spring 源码时看到 BeanFactory、Adapter、Decorator,能猜到是"工厂"、"适配器"、"装饰",但说不出核心设计;
- 面试时被问到"单例模式的线程安全实现",只能答出 synchronized,对 volatile、DCL、枚举只说其然而不知所以然......
这一切的根源,都是因为缺少一套可复用的设计语言。设计模式(Design Patterns)正是软件工程前辈从海量项目中提炼出来的"标准答案",它不仅是理论,更是 Spring、Tomcat、MyBatis 等顶级框架的骨架。
学习设计模式你将收获:
- 复用性:直接用成熟方案替代临时拼凑;
- 可维护性:清晰的模块划分,代码更好读更好改;
- 可扩展性:天然遵循开闭原则,为变化预留接口;
- 沟通效率:一句"这里用策略模式"胜过千言万语;
- 源码能力:读懂框架背后的设计思想,不再是"API 调用侠"。
2. 设计模式的起源与分类
1994 年,Erich Gamma 等四人(GoF)出版了《设计模式:可复用面向对象软件的基础》,收录了 23 种经典模式,按目的分为三大类:
创建型模式(5 种)------ 将对象的创建与使用分离
| 模式 | 核心思路 |
|---|---|
| Singleton | 确保一个类只有一个实例,并提供全局访问点 |
| Factory Method | 定义创建对象的接口,让子类决定实例化哪个类 |
| Abstract Factory | 创建一系列相关或相互依赖的对象,无需指定具体类 |
| Builder | 将复杂对象的构建过程与表示分离 |
| Prototype | 通过拷贝原型创建新对象 |
结构型模式(7 种)------ 组合类或对象形成更大结构
| 模式 | 核心思路 |
|---|---|
| Adapter | 将不兼容的接口转化为客户期望的接口 |
| Bridge | 将抽象与实现分离,使两者可独立变化 |
| Composite | 将对象组合成树形结构,统一处理部分与整体 |
| Decorator | 动态给对象添加额外职责,比继承更灵活 |
| Facade | 为子系统提供统一的高层接口 |
| Flyweight | 共享细粒度对象,减少内存占用 |
| Proxy | 为其他对象提供代理,控制对该对象的访问 |
行为型模式(11 种)------ 关注对象间的职责分配与交互
| 模式 | 核心思路 |
|---|---|
| Chain of Responsibility | 将请求的发送者和接收者解耦,多个对象可处理 |
| Command | 将请求封装为对象,支持参数化、队列化等 |
| Interpreter | 定义语言文法并解释其语句 |
| Iterator | 顺序访问聚合对象而不暴露内部结构 |
| Mediator | 用一个中介对象封装一系列对象的交互 |
| Memento | 捕获并外部化对象内部状态,支持撤销 |
| Observer | 定义一对多依赖,状态变化时自动通知所有依赖者 |
| State | 对象内部状态改变时改变其行为 |
| Strategy | 定义算法族并使其可互相替换 |
| Template Method | 定义算法骨架,将某些步骤延迟到子类 |
| Visitor | 在不改变元素类的前提下定义新操作 |
3. 六大设计原则(SOLID)------ 模式背后的"道"
- 单一职责原则(SRP):一个类只负责一件事。
- 开闭原则(OCP):对扩展开放,对修改关闭。
- 里氏替换原则(LSP):子类必须能替换父类。
- 依赖倒置原则(DIP):依赖抽象而非具体实现。
- 接口隔离原则(ISP):接口应小而专一。
- 迪米特法则(LoD):一个对象应尽量少了解其他对象。
后续每篇模式文章中,我都会标注它体现了哪些原则,帮你打通"道"与"术"。
4. 系列文章总目录(持续更新)
| 序号 | 文章标题 | 类别 |
|---|---|---|
| 1 | Java 23 种设计模式:从踩坑到精通------ 开篇及系列介绍 | 综述 |
| 2 | Java 23 种设计模式:从踩坑到精通 | Singleton ------ 你写的单例真的安全吗? | 创建型 |
| 3 | Java 23 种设计模式:从踩坑到精通 | Factory ------ 还在写一坨 if-else 创建对象吗? | 创建型 |
| 4 | Java 23 种设计模式:从踩坑到精通 | Abstract Factory ------ 产品族创建,如何避免"一锅粥"? | 创建型 |
| 5 | Java 23 种设计模式:从踩坑到精通 | Builder ------ 构造器参数太多?试试链式调用 | 创建型 |
| 6 | Java 23 种设计模式:从踩坑到精通 | Prototype ------ 克隆对象,深拷贝与浅拷贝的坑你踩过吗? | 创建型 |
| 7 | Java 23 种设计模式:从踩坑到精通 | Adapter ------ 让不兼容的接口也能一起工作 | 结构型 |
| 8 | Java 23 种设计模式:从踩坑到精通 | Bridge ------ 抽象与实现分离,应对多维度变化 | 结构型 |
| 9 | Java 23 种设计模式:从踩坑到精通 | Composite ------ 树形结构处理,部分与整体一视同仁 | 结构型 |
| 10 | Java 23 种设计模式:从踩坑到精通 | Decorator ------ 比继承更灵活的扩展方式,你用过吗? | 结构型 |
| 11 | Java 23 种设计模式:从踩坑到精通 | Facade ------ 给复杂系统装一个"一键启动" | 结构型 |
| 12 | Java 23 种设计模式:从踩坑到精通 | Flyweight ------ 内存吃不消?试试共享对象池 | 结构型 |
| 13 | Java 23 种设计模式:从踩坑到精通 | Proxy ------ 你的 AOP 就是用代理实现的 | 结构型 |
| 14 | Java 23 种设计模式:从踩坑到精通 | Chain of Responsibility ------ 请求流转,审批流程的本质 | 行为型 |
| 15 | Java 23 种设计模式:从踩坑到精通 | Command ------ 把操作封装成对象,实现撤销与排队 | 行为型 |
| 16 | Java 23 种设计模式:从踩坑到精通 | Interpreter ------ 自己动手写一个小语言解释器 | 行为型 |
| 17 | Java 23 种设计模式:从踩坑到精通 | Iterator ------ 遍历集合,为什么不直接暴露内部结构? | 行为型 |
| 18 | Java 23 种设计模式:从踩坑到精通 | Mediator ------ 对象关系太乱?请一位"中间人" | 行为型 |
| 19 | Java 23 种设计模式:从踩坑到精通 | Memento ------ 快照与撤销,给对象装一个"后悔药" | 行为型 |
| 20 | Java 23 种设计模式:从踩坑到精通 | Observer ------ 发布-订阅,你每天都在用的模式 | 行为型 |
| 21 | Java 23 种设计模式:从踩坑到精通 | State ------ if-else 满天飞?让状态自己决定行为 | 行为型 |
| 22 | Java 23 种设计模式:从踩坑到精通 | Strategy ------ 算法族的封装与切换,告别 if-else | 行为型 |
| 23 | Java 23 种设计模式:从踩坑到精通 | Template Method ------ 定义算法骨架,交给子类填充细节 | 行为型 |
| 24 | Java 23 种设计模式:从踩坑到精通 | Visitor ------ 数据结构稳定但操作多变?试试访问者 | 行为型 |
表格中"Factory"一文将覆盖 简单工厂 与 工厂方法 两种模式,与 GoF 分类保持一致。发布后每篇文章链接会逐一补全。
5. 如何高效学习本系列?
- 带着问题读:每篇都以真实场景痛点开头,先思考再对照模式。
- 动手运行代码:所有示例均可直接运行,推荐亲自 Debug 一遍。
- 对比记忆:每篇末尾有对比表格和面试题,辅助自测。
- 结合框架:关注 Spring、MyBatis 等源码中的模式应用,让理论落地。
🧭 《Java 23 种设计模式:从踩坑到精通》快速导航
- 系列总目录(本文为开篇)
- 当前:开篇及系列介绍(你在这里)
- 下一篇:Java 设计模式(二):Singleton ------ 你写的单例真的安全吗?
- 创建型模式汇总:单例、工厂、建造者、原型
- 结构型模式汇总:适配器、装饰器、代理......
- 行为型模式汇总:观察者、策略、模板方法......
🔔 关注《Java 23 种设计模式:从踩坑到精通》,用 24 篇文章彻底吃透设计模式!