Java 23 种设计模式:从踩坑到精通 —— 开篇及系列介绍

1. 为什么你必须懂设计模式?

你是否遇到过这样的场景:

  • 业务代码越写越长,if-else 嵌套到怀疑人生,想重构却不知从哪下手;
  • 读 Spring 源码时看到 BeanFactoryAdapterDecorator,能猜到是"工厂"、"适配器"、"装饰",但说不出核心设计;
  • 面试时被问到"单例模式的线程安全实现",只能答出 synchronized,对 volatile、DCL、枚举防反射只说其然而不知所以然;
  • 团队 Code Review 时,明明知道这块代码设计有问题,却无法用专业术语清晰表达改进方向......

这一切的根源,都是因为缺少一套可复用的设计语言

设计模式(Design Patterns)并非凭空创造的理论。1994 年,Erich Gamma 等四人(GoF)从无数大型软件项目中提炼出 23 种经过反复验证的解决方案,出版了《设计模式:可复用面向对象软件的基础》。这些模式是 Spring、Tomcat、MyBatis 等顶级框架的骨架,更是 Java 生态中一切优雅设计的基石。

学习设计模式你将收获:

  • 复用性:直接用成熟方案替代临时拼凑,避免重复造轮子;
  • 可维护性:清晰的模块划分,代码更好读更好改;
  • 可扩展性:天然遵循开闭原则,为未来需求变化预留接口;
  • 沟通效率 :一句"这里用策略模式"胜过千言万语;
  • 源码阅读能力:读懂框架背后的设计思想,从"会用框架"进阶到"能设计框架"。

2. 本系列与其它设计模式文章有什么不同?

你可能已经在网上看过不少设计模式教程,但大部分停留在"定义 + 简单示例"层面。本系列的核心差异在于:

对比维度 常见教程 本系列
单例写法 懒汉式、饿汉式,2~3 种 12 种写法 + 反射/序列化/克隆三防
工厂模式 简单工厂一笔带过 简单工厂→工厂方法→抽象工厂全链路演进
框架结合 偶尔提一句 每篇至少 3 个框架源码案例(Spring/MyBatis/JDK)
UML 图 手绘或缺失 25 张 PlantUML 标准类图,源码可下载
可运行代码 片段代码居多 每篇一个 Demo 类,复制即跑
AI 时代视角 每篇分析云原生/AI 场景中的现代应用
面试导向 偶尔 每篇末尾误区 + 高频追问
资源福利 完结后发放全套源码 + UML 源码包

💡 这不仅仅是一个教程,更是一份可以反复查阅的 设计模式速查手册


3. 设计模式的起源与分类

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 在不改变元素类的前提下定义新操作

4. 六大设计原则(SOLID)------ 模式背后的"道"

  • 单一职责原则(SRP):一个类只负责一件事。
  • 开闭原则(OCP):对扩展开放,对修改关闭。
  • 里氏替换原则(LSP):子类必须能替换父类。
  • 依赖倒置原则(DIP):依赖抽象而非具体实现。
  • 接口隔离原则(ISP):接口应小而专一。
  • 迪米特法则(LoD):一个对象应尽量少了解其他对象。

📌 想了解设计模式中六大设计原则在实际项目中是如何应用的,可阅读 抖音抖店电子面单对接:从"面条代码"到整洁架构的涅槃之路 文章获取详情。 后续每篇模式文章中,我都会标注它体现了哪些原则,帮你打通"道"与"术"。


5. 2026 年了,设计模式过时了吗?

你可能会问:现在 AI 都能写代码了,云原生、微服务满天飞,23 种"老古董"模式还有必要学吗?

答案是:不仅有必要,而且比以往更重要。

5.1 面试的"硬通货"从未贬值

2026 年各大厂的 Java 面试题库中,设计模式依然占据独立且重要的章节。变化在于------面试官不再满足于"单例有几种写法",而是追问:

  • "Spring 中哪里用了代理模式?为什么不用装饰器模式?"
  • "你项目中的责任链模式和策略模式是如何配合的?"
  • "如何用函数式接口简化策略模式的实现?"

背定义就能过关的时代结束了,真正理解模式的设计意图和适用边界,才是通关密码。

5.2 框架的"灵魂"从未改变

Spring Boot 3.x、Spring Cloud、MyBatis、Netty 等主流框架本身就是设计模式的集大成者。不懂代理模式,你永远看不懂 Spring AOP 的源码;不懂模板方法模式,你永远不知道 JdbcTemplate 为什么能自动管理连接和资源释放。

设计模式是你从"API 调用侠"跃升到"框架阅读者"的唯一阶梯。

5.3 AI 时代的"编程素养"反而更重要

大语言模型确实能生成代码,但代码质量高度依赖你的 Prompt 质量。当你对 AI 说"用策略模式重构这段 if-else 逻辑,要求符合开闭原则"时,你不仅能得到更准确的代码,还能快速验证和迭代设计方案。

设计模式正在成为人机协作编程的"通用指令集"------你越懂模式,AI 就越听话。

5.4 云原生时代的"新经典"与 GoF 一脉相承

云原生催生了一批新模式------Saga、CQRS、Event Sourcing、Circuit Breaker...... 但这些"新经典"并非凭空诞生:

  • Saga 脱胎于状态模式 + 责任链模式;
  • CQRS 蕴含着策略模式的核心思想;
  • Event Sourcing观察者模式 + 备忘录模式的分布式延伸。

学透 GoF 23 种经典模式,你就能看懂所有新模式的"基因图谱"。


6. 设计模式面试高频题 Top10(速记福利)

作为开篇福利,这里列出面试中最常被问到的 10 个设计模式问题。后续每篇文章会展开详解:

序号 问题 对应模式
1 单例有几种写法?DCL 为什么要加 volatile? Singleton
2 简单工厂和工厂方法有什么区别? Factory
3 抽象工厂和工厂方法分别适用于什么场景? Abstract Factory
4 代理模式和装饰器模式的核心区别? Proxy / Decorator
5 策略模式和状态模式的区别? Strategy / State
6 Spring AOP 用了什么设计模式? Proxy
7 Servlet Filter 是什么设计模式? Chain of Responsibility
8 JDK 中哪些地方用了设计模式? 综合
9 模板方法模式和策略模式如何选择? Template Method / Strategy
10 观察者模式和发布-订阅模式的区别? Observer

7. 《Java 23 种设计模式:从踩坑到精通》总目录(持续更新)

序号 文章标题 类别 备注
1 Java 23 种设计模式:从踩坑到精通------ 开篇及系列介绍(本文) 综述 永久导航页
2 Java 23 种设计模式:从踩坑到精通 ------ 单例模式 ------ 你写的真的安全吗?(12种写法全揭秘) 创建型 12种写法+三防
3 Java 23 种设计模式:从踩坑到精通 ------ 工厂模式 ------ 还在写一坨 if-else?简单工厂→工厂方法→抽象工厂全演进 创建型 📦 工厂体系合集(上)
4 Java 23 种设计模式:从踩坑到精通 ------ 抽象工厂 ------ 支付/收款如何成套创建?跨平台 UI 如何一键换肤? 创建型 📦 工厂体系合集(下)
5 Java 23 种设计模式:从踩坑到精通 ------ 建造者模式 ------ 构造器参数太多?试试链式调用 创建型
6 Java 23 种设计模式:从踩坑到精通 ------ 原型模型 ------ 克隆对象,深拷贝与浅拷贝的坑你踩过吗? 创建型
7 Java 23 种设计模式:从踩坑到精通 ------ Adapter ------ 让不兼容的接口也能一起工作 结构型
8 Java 23 种设计模式:从踩坑到精通 ------ Bridge ------ 抽象与实现分离,应对多维度变化 结构型
9 Java 23 种设计模式:从踩坑到精通 ------ Composite ------ 树形结构处理,部分与整体一视同仁 结构型
10 Java 23 种设计模式:从踩坑到精通 ------ Decorator ------ 比继承更灵活的扩展方式,你用过吗? 结构型 🔗 对比:代理模式(第13篇)
11 Java 23 种设计模式:从踩坑到精通 ------ Facade ------ 给复杂系统装一个"一键启动" 结构型
12 Java 23 种设计模式:从踩坑到精通 ------ Flyweight ------ 内存吃不消?试试共享对象池 结构型
13 Java 23 种设计模式:从踩坑到精通 ------ Proxy ------ 你的 AOP 就是用代理实现的 结构型 🔗 对比:装饰器模式(第10篇)
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篇)
22 Java 23 种设计模式:从踩坑到精通 ------ Strategy ------ 算法族的封装与切换,告别 if-else 行为型 🔗 对比:状态模式(第21篇)
23 Java 23 种设计模式:从踩坑到精通 ------ Template Method ------ 定义算法骨架,交给子类填充细节 行为型
24 Java 23 种设计模式:从踩坑到精通 ------ Visitor ------ 数据结构稳定但操作多变?试试访问者 行为型
25 Java 23 种设计模式:从踩坑到精通 ------ 系列总结:24 篇文章,我们学到了什么? 总结 附全套源码+UML福利

📌 追更指南:建议收藏本文作为导航页,每更新一篇我会在目录中补上链接。点击右上角「关注」,每周更新 2~3 篇,预计 2 个月完结,不错过任何一篇。


8. 场景速查索引(遇到问题→直接找模式)

你的问题 用什么模式 对应文章
全局只有一个实例,多了浪费 单例模式 第 2 篇
一坨 if-else 创建对象 工厂方法 第 3 篇
支付+收款必须成套创建 抽象工厂 第 4 篇
构造器参数太多 建造者模式 第 5 篇
复制对象,修改不污染原对象 原型模式 第 6 篇
对接第三方接口,格式不兼容 适配器模式 第 7 篇
多维度变化导致类爆炸 桥接模式 第 8 篇
树形结构(菜单/文件夹/组织架构) 组合模式 第 9 篇
动态增强功能,不想用继承 装饰器模式 第 10 篇
复杂子系统调用太繁琐 外观模式 第 11 篇
大量重复对象,内存溢出 享元模式 第 12 篇
AOP、事务、权限控制 代理模式 第 13 篇
多级审批,流程传递 责任链模式 第 14 篇
撤销操作、宏命令 命令模式 第 15 篇
自定义公式/规则解析 解释器模式 第 16 篇
自定义集合遍历 迭代器模式 第 17 篇
多对象复杂交互,网状耦合 中介者模式 第 18 篇
快照、撤销、后悔药 备忘录模式 第 19 篇
状态变化自动通知 观察者模式 第 20 篇
订单状态流转,行为随状态变 状态模式 第 21 篇
多种算法/规则动态切换 策略模式 第 22 篇
流程固定,部分步骤可定制 模板方法模式 第 23 篇
数据结构稳定,操作多变 访问者模式 第 24 篇

💡 这张表让专栏从"学习资料"升级为"开发手册",建议收藏备用。


9. 易混模式速查表

模式 A 模式 B 核心区别 对应文章
代理模式 装饰器模式 代理控制访问,装饰增强功能 第10篇 vs 第13篇
策略模式 状态模式 策略由客户端选择,状态自己决定切换 第21篇 vs 第22篇
适配器模式 装饰器模式 适配改变接口,装饰不改变接口 第7篇 vs 第10篇
外观模式 中介者模式 外观单向简化,中介者双向协调 第11篇 vs 第18篇
工厂方法 抽象工厂 单一产品扩展 vs 产品族创建 第3篇 vs 第4篇
享元模式 单例模式 享元可多个共享实例,单例只有一个 第12篇 vs 第2篇
策略模式 模板方法 策略用组合替换算法,模板用继承控制骨架 第22篇 vs 第23篇

10. 推荐阅读路线

🗺️ 入门必读(6篇)

单例 → 工厂方法 → 建造者 → 适配器 → 外观 → 模板方法

🗺️ 进阶提升(10篇)

抽象工厂 → 装饰器 → 代理 → 观察者 → 策略 → 状态 → 责任链 → 命令 → 组合 → 迭代器

🗺️ 高阶挑战(7篇)

原型 → 桥接 → 享元 → 中介者 → 备忘录 → 解释器 → 访问者


11. 如何高效学习本系列?

  1. 带着问题读:每篇都以真实场景痛点开头,先思考再对照模式。
  2. 动手运行代码:所有示例均可直接运行,推荐亲自 Debug 一遍。
  3. 对比记忆:每篇末尾有对比表格和面试题,辅助自测。
  4. 结合框架:关注 Spring、MyBatis 等源码中的模式应用,让理论落地。
相关推荐
Wang ruoxi1 小时前
Pygame 小游戏——数独
开发语言·python·pygame
艾利克斯冰1 小时前
Java设计模式-创建型模式(更新完成)
设计模式
折哥的程序人生 · 物流技术专研1 小时前
《Java 100 天进阶之路》第93篇:Redis实战应用:缓存策略与分布式锁(2026版)
java·redis·缓存·面试·架构·求职招聘
瓦特what?1 小时前
位运算核心技巧与应用
java·jvm·算法
人道领域1 小时前
【LeetCode刷题日记】90.子集Ⅱ--- 归纳题解
java·开发语言·leetcode
ch.ju2 小时前
Java Programming Chapter 4——Characteristics of inheritance
java·开发语言
复园电子2 小时前
企业PDF批量盖章开发集成指南:API对接OA/LIMS系统,高并发落地实战
开发语言·python·pdf
就叫_这个吧2 小时前
tomcat在idea控制台乱码问题解决
java·tomcat·intellij-idea
SunnyDays10112 小时前
如何使用 C# 自动调整 Excel 行高和列宽
开发语言·c#·excel