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

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

摘要:设计模式是 Java 工程师从"会用框架"到"读懂框架"的分水岭。本系列将以 GoF 23 种经典设计模式为主线,结合 Java 语言特性与 Spring、MyBatis 等主流框架的源码案例,用通俗的图文和可直接运行的代码,逐一拆解每种模式的原理与最佳实践。本文作为系列开篇,为你梳理模式的起源与分类、六大设计原则、完整学习路线和文章目录,帮你建立起一套可复用的设计直觉。


📖 《Java 23 种设计模式:从踩坑到精通》

下一篇:Singleton 单例模式 →


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. 如何高效学习本系列?

  1. 带着问题读:每篇都以真实场景痛点开头,先思考再对照模式。
  2. 动手运行代码:所有示例均可直接运行,推荐亲自 Debug 一遍。
  3. 对比记忆:每篇末尾有对比表格和面试题,辅助自测。
  4. 结合框架:关注 Spring、MyBatis 等源码中的模式应用,让理论落地。

🧭 《Java 23 种设计模式:从踩坑到精通》快速导航

🔔 关注《Java 23 种设计模式:从踩坑到精通》,用 24 篇文章彻底吃透设计模式!

相关推荐
罗不俷18 小时前
从零搭建 Mac Java 开发环境:Homebrew + JDK + Maven + Git 全流程配置
java
_日拱一卒18 小时前
LeetCode:124二叉树中的最大路径和
java·数据结构·算法
ch.ju18 小时前
Java程序设计(第3版)第四章——构造方法
java·开发语言
阿里嘎多学长18 小时前
2026-05-25 GitHub 热点项目精选
开发语言·程序员·github·代码托管
艺舟先生18 小时前
开源agent源码架构分析之claude(一)
人工智能·架构·开源
张忠琳18 小时前
【vllm】(v1 Attention)vLLM V1 Attention— Part3 MLA后端体系
ai·架构·vllm
程序员三明治18 小时前
【AI】Tika:一次文档解析引擎的工程实践
java·人工智能·大模型·llm·后端开发·rag·tika文件解析
Devin~Y18 小时前
大厂Java面试实录:Spring Boot/Cloud、Redis+Kafka、JVM调优与RAG/Agent(Spring AI)三轮递进问答
java·jvm·spring boot·redis·spring cloud·kafka·rag
阿维的博客日记18 小时前
Spring Boot 里怎么统计接口参数和耗时并打印日志
java·spring boot·后端