大白话说Java设计模式-01-开篇总览(附50篇学习路线图)
📌一句话本质:设计模式不是 23 条死规矩,是 23 个"老司机处理问题的套路",学会了你写代码就跟写诗一样优雅。
🏷️ 标签:设计模式 / Java / 23 种模式 / SOLID / 大白商城 🎯 适合:初中级后端 / 想系统掌握设计模式的程序员 / 准备面试的工程师
目录
- 一、为什么要写这个专栏?大白商城踩过的 3 个血泪坑
- 二、什么是设计模式?5 分钟大白话讲透
- 三、为什么必须学?业务、面试、工程三个角度
- 四、SOLID 五大原则:大白话版
- 五、23 种设计模式全景图(按使用频率分层)
- 六、大白商城项目介绍:你的"练兵场"
- 七、技术栈:JDK 17 + Spring Boot 3 + Spring Cloud Alibaba
- 八、50 篇学习路线图:4 阶段渐进式掌握
- 九、学习方法:3 个建议让你少走 2 年弯路
- 十、本篇小结 + 下一篇文章预告
一、为什么要写这个专栏?大白商城踩过的 3 个血泪坑
先讲个真实故事。
大白商城 2024 年 6 月做了一次大促备战。技术评审会上,老板指着屏幕上 600 行的OrderService大方法问:“这段代码谁能在一个 Sprint 内改完?”全场沉默。
那个 600 行的大方法,从下单、扣库存、算优惠、扣优惠券、发短信、记日志、改状态……全塞在一个if-else里。改一个支付渠道适配,全员通宵;改一个优惠规则,QA 测 3 天;上线一个 bug,半夜回滚 2 次。
这不是个例。我盘点了过去一年大白商城线上事故,80% 来自"代码不可改"。这背后是同一个原因:
项目初期没人管设计模式,后期全员为烂代码买单。
更扎心的是,新人入职看代码一脸懵:
- “这个
XXXFactory干啥用的?” - “为什么到处都是
Strategy?” - “这段代码没有注释我怎么知道是单例?”
烂代码不是一天写成的,是日积月累没规范造成的。
这个专栏想做的事情只有一个:用大白商城的真实业务场景,把 23 种设计模式从"教科书"变成"肌肉记忆"。学完你不再是"知道"模式,而是"会用"模式。
二、什么是设计模式?5 分钟大白话讲透
2.1 先抛掉"教科书"定义
网上一搜"设计模式",十有八九来一句:“设计模式是软件设计中常见问题的典型解决方案。”
听不懂,对吧?我换个说法。
设计模式 = 老司机处理问题的套路。
举个生活中的例子:
- 你第一次做饭,不知道先放油还是先放菜。看了菜谱(前人经验),下次你也会按这个顺序。
- 你第一次开车,不知道红灯停绿灯行。学了交通规则(通用规范),全国通用。
- 你第一次写代码,不知道怎么让一个类只产生一个实例。学了单例模式(行业最佳实践),以后碰到类似问题就有思路。
设计模式不是"新发明",是"老套路"。它把程序员几十年积累的"处理某类问题的最佳做法"提炼出来,形成 23 个通用模板。
2.2 23 这个数字怎么来的?
1994 年,GoF(Gang of Four,四人帮)—— Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides —— 出版了一本神书《Design Patterns: Elements of Reusable Object-Oriented Software》。
他们从大量面向对象项目中提炼出23 个反复出现的设计问题,并给出经过验证的解决方案。这 23 个模式被业界奉为"圣经",成了后来 Java/C++/C# 等语言学习的必修课。
2.3 设计模式 ≠ 算法
很多人混淆这两个概念,对比一下:
| 维度 | 设计模式 | 算法 |
|---|---|---|
| 解决问题 | 代码组织问题(怎么写好) | 计算问题(怎么算快) |
| 层次 | 架构 / 设计 | 编码 / 实现 |
| 例子 | 单例、工厂、观察者 | 排序、搜索、动态规划 |
| 经典书目 | 《设计模式》GoF | 《算法导论》 |
简单记:算法让代码"算得快",设计模式让代码"改得少"。
2.4 设计模式不是"银弹"
必须强调:设计模式不是万能药。
- 业务逻辑就 3 行的工具方法,别硬套模式,那是过度设计。
- 学习模式是为了**“在合适的场景用合适的模式”**,不是"为了用模式而用模式"。
我们这个专栏会反复强调:“什么时候用 / 什么时候不用 / 用了会出什么问题”。这是很多书不会讲的,但恰恰是工程上最重要的。
三、为什么必须学?业务、面试、工程三个角度
3.1 业务角度:写出能活下来的代码
什么样的代码"能活下来"?三个特征:
| 特征 | 解释 | 设计模式如何帮助 |
|---|---|---|
| 可改 | 需求变了能快速响应 | 单一职责、开闭原则 |
| 可读 | 新人 1 周能上手 | 模式自带"行业术语" |
| 可测 | 单元测试覆盖率高 | 依赖倒置、接口隔离 |
大白商城血泪教训:上线时一个支付渠道,半年后接入 5 个渠道;上线时一种优惠券,半年后搞 20 种营销叠加。没有设计模式,每一次变化都是重构。
3.2 面试角度:大厂必考
阿里、字节、美团、京东……任何一家大厂的 Java 后端面试,设计模式是必考项。
高频考察点:
| 模式 | 考察频率 | 典型面试题 |
|---|---|---|
| 单例 | ⭐⭐⭐⭐⭐ | 手写 5 种实现、volatile 作用 |
| 工厂方法 / 抽象工厂 | ⭐⭐⭐⭐⭐ | Spring BeanFactory、LoggerFactory |
| 代理 | ⭐⭐⭐⭐⭐ | JDK 动态代理 vs CGLIB、AOP 原理 |
| 策略 | ⭐⭐⭐⭐ | 多支付渠道、Comparable |
| 观察者 | ⭐⭐⭐⭐ | Spring EventListener、ZooKeeper Watcher |
| 责任链 | ⭐⭐⭐⭐ | Servlet Filter、Spring Interceptor |
| 装饰器 | ⭐⭐⭐ | IO 流家族、HttpServletRequestWrapper |
| 模板方法 | ⭐⭐⭐ | Spring refresh()、AbstractApplicationContext |
| 状态 | ⭐⭐⭐ | 订单状态机 |
| 建造者 | ⭐⭐⭐ | StringBuilder、@Builder 注解 |
学完本专栏,面试官问"你在项目里用过什么模式",你能直接拿大白商城的案例甩他脸上。
3.3 工程角度:和大牛对得上话
设计模式是程序员的"行业术语"。
- 你和同事说:“这段代码可以用策略模式重构。”—— 对方秒懂。
- 你和同事说:“这里用 if-else 堆逻辑太丑了。”—— 对方觉得你菜。
懂设计模式 = 在技术圈能对得上话 = 升职加薪的底层能力。
四、SOLID 五大原则:大白话版
设计模式背后有 5 个核心原则(SOLID),是 23 个模式的"母原则"。先讲原则,再看模式,就会有"原来如此"的感觉。
4.1 S - 单一职责原则(Single Responsibility Principle)
大白话:一个类只干一件事。
反面教材:
/** * ❌ 反例:上帝类,啥都干 */@ServicepublicclassUserService{publicvoidregister(Useruser){/* 注册 */}publicvoidlogin(Stringusername,Stringpassword){/* 登录 */}publicvoidsendEmail(Stringto,Stringcontent){/* 发邮件 */}publicvoidgenerateReport(){/* 生成报表 */}publicvoiduploadAvatar(MultipartFilefile){/* 上传头像 */}}正确做法:拆成 5 个类。
@ServicepublicclassUserRegisterService{/* 只注册 */}@ServicepublicclassUserLoginService{/* 只登录 */}@ServicepublicclassEmailService{/* 只发邮件 */}@ServicepublicclassReportService{/* 只生报表 */}@ServicepublicclassAvatarService{/* 只传头像 */}好处:改"发邮件"逻辑不会影响"注册"。
4.2 O - 开闭原则(Open/Closed Principle)
大白话:对扩展开放,对修改关闭。
反面教材:
/** * ❌ 反例:每加一种支付方式都改这段代码 */publicclassPaymentService{publicvoidpay(Stringchannel,BigDecimalamount){if("alipay".equals(channel)){// 支付宝支付逻辑}elseif("wechat".equals(channel)){// 微信支付逻辑}elseif("unionpay".equals(channel)){// 银联支付逻辑}// 每次加新渠道都要改这里}}正确做法:用策略模式(专栏 25 篇会讲)。
/** * ✅ 正例:新加渠道只需新增一个类,原代码不动 */publicinterfacePaymentStrategy{voidpay(BigDecimalamount);}@ServicepublicclassAlipayStrategyimplementsPaymentStrategy{/* 支付宝 */}@ServicepublicclassWechatStrategyimplementsPaymentStrategy{/* 微信 */}@ServicepublicclassUnionPayStrategyimplementsPaymentStrategy{/* 银联 */}好处:新增渠道不用改老代码,对扩展开放,对修改关闭。
4.3 L - 里氏替换原则(Liskov Substitution Principle)
大白话:子类能完全替换父类,且行为不出错。
反面教材:
/** * ❌ 反例:父类是"加法",子类改成"减法" */publicclassCalculator{publicintcompute(inta,intb){returna+b;}}publicclassSubCalculatorextendsCalculator{@Overridepublicintcompute(inta,intb){returna-b;// 子类悄悄改了行为,调用方直接懵}}正确做法:子类不重写父类语义,只扩展。
实战中:这个原则最常被违反的是"父类方法抛异常,子类不抛"或"父类返回空,子类返回 null"。
4.4 I - 接口隔离原则(Interface Segregation Principle)
大白话:接口要小而专,别搞"万能接口"。
反面教材:
/** * ❌ 反例:上帝接口,啥方法都有 */publicinterfaceAnimal{voideat();voidfly();// 鱼不会飞voidswim();// 鸟不会游泳voidrun();// 蛇跑不快}正确做法:按能力拆分接口。
publicinterfaceEater{voideat();}publicinterfaceFlyer{voidfly();}publicinterfaceSwimmer{voidswim();}publicinterfaceRunner{voidrun();}publicclassBirdimplementsEater,Flyer,Runner{/* 鸟 */}publicclassFishimplementsEater,Swimmer{/* 鱼 */}好处:鱼类不会被迫实现 fly()。
4.5 D - 依赖倒置原则(Dependency Inversion Principle)
大白话:高层模块不依赖低层模块,都依赖抽象。
反面教材:
/** * ❌ 反例:高层直接 new 低层实现 */publicclassOrderService{privateMysqlUserRepositoryuserRepo=newMysqlUserRepository();// 改数据库类型?改 OrderService 代码!}正确做法:依赖接口。
publicclassOrderService{@ResourceprivateUserRepositoryuserRepo;// 依赖接口,不依赖实现}好处:换 Redis 存用户数据?只换实现类,OrderService 不动。
4.6 SOLID 五原则速记
| 字母 | 原则 | 一句话 | 大白话例子 |
|---|---|---|---|
| S | 单一职责 | 一个类只干一件事 | 餐厅服务员只管点菜,别管炒菜 |
| O | 开闭原则 | 对扩展开放,对修改关闭 | 加新菜不用改菜单,加页就行 |
| L | 里氏替换 | 子类能完全替换父类 | 粤菜厨子走了,川菜厨子能顶上 |
| I | 接口隔离 | 接口要小而专 | 别让鱼学飞 |
| D | 依赖倒置 | 高层依赖抽象不依赖实现 | 顾客不关心谁炒菜,只关心好吃 |
23 种设计模式,都是这 5 个原则的具体实现。理解了 SOLID,模式就懂了"为什么这么设计"。
五、23 种设计模式全景图(按使用频率分层)
5.1 三大家族
Java 23 种设计模式 │ ┌───────────────────┼───────────────────┐ │ │ │ ┌───▼────┐ ┌────▼────┐ ┌────▼────┐ │ 创建型 │ │ 结构型 │ │ 行为型 │ │ 5 种 │ │ 7 种 │ │ 11 种 │ └────────┘ └─────────┘ └─────────┘ 解决"对象怎么 解决"对象怎么 解决"对象怎么 创建"的问题 组装"的问题 通信"的问题5.2 完整 23 模式 + 大白商城场景对照表
| 序号 | 模式 | 分类 | 一句话本质 | 大白商城实战场景 | 热度 |
|---|---|---|---|---|---|
| 01 | 单例 | 创建型 | 全公司只准有一个管家 | 配置中心、雪花 ID 生成器 | 🔥🔥🔥🔥🔥 |
| 02 | 工厂方法 | 创建型 | 想造啥告诉我,我给你造 | 多支付渠道(支付宝/微信/银联) | 🔥🔥🔥🔥🔥 |
| 03 | 抽象工厂 | 创建型 | 一整套产品打包造 | 多端商品详情(PC/小程序/H5) | 🔥🔥🔥 |
| 04 | 建造者 | 创建型 | 像搭积木一样造复杂对象 | 复杂订单对象构造 | 🔥🔥🔥🔥 |
| 05 | 原型 | 创建型 | 照着葫芦画瓢 | 商品 SKU 克隆、营销活动模板 | 🔥🔥 |
| 06 | 代理 | 结构型 | 找人代办 | 统一日志、幂等、权限切面 | 🔥🔥🔥🔥🔥 |
| 07 | 适配器 | 结构型 | 转接头 | 第三方物流接口对接 | 🔥🔥🔥🔥 |
| 08 | 装饰器 | 结构型 | 给对象穿衣服 | 订单价格计算(满减+折扣+运费) | 🔥🔥🔥 |
| 09 | 外观 | 结构型 | 统一接待窗口 | 下单门面服务 | 🔥🔥🔥 |
| 10 | 组合 | 结构型 | 树形结构 | 商品类目树、菜单树 | 🔥🔥🔥 |
| 11 | 桥接 | 结构型 | 抽象和实现分开 | 优惠券类型 × 优惠力度 | 🔥🔥 |
| 12 | 享元 | 结构型 | 共享对象省内存 | 商品标签、库存 SKU 共享 | 🔥🔥 |
| 13 | 策略 | 行为型 | 算法可替换 | 支付策略、优惠策略、配送策略 | 🔥🔥🔥🔥🔥 |
| 14 | 模板方法 | 行为型 | 父类定骨架,子类填细节 | 通用下单骨架 | 🔥🔥🔥🔥🔥 |
| 15 | 观察者 | 行为型 | 一变通知所有 | 订单状态变更通知 | 🔥🔥🔥🔥🔥 |
| 16 | 责任链 | 行为型 | 排队处理 | 优惠计算、风控校验、审批流 | 🔥🔥🔥🔥🔥 |
| 17 | 命令 | 行为型 | 请求变对象 | 订单状态变更、撤销操作 | 🔥🔥🔥 |
| 18 | 状态 | 行为型 | 状态变行为变 | 订单状态机 | 🔥🔥🔥🔥 |
| 19 | 中介者 | 行为型 | 所有对话找中间人 | 订单事件总线 | 🔥🔥 |
| 20 | 迭代器 | 行为型 | 一个个取出来 | 商品分页游标 | 🔥🔥 |
| 21 | 备忘录 | 行为型 | 存个快照能恢复 | 购物车快照 | 🔥🔥 |
| 22 | 访问者 | 行为型 | 访问不同对象做不同事 | 营销规则计算 | 🔥 |
| 23 | 解释器 | 行为型 | 自己定义语言 | 优惠规则表达式解析 | 🔥 |
5.3 学习优先级建议
| 优先级 | 模式 | 理由 |
|---|---|---|
| P0 必学(日常工作天天用) | 单例、工厂方法、代理、策略、模板方法、观察者、责任链 | 几乎每个项目都用到 |
| P1 应学(复杂业务必备) | 建造者、装饰器、适配器、外观、组合、状态、命令 | 提升代码质量利器 |
| P2 选学(特定场景) | 抽象工厂、原型、桥接、享元、中介者、迭代器、备忘录 | 特定业务才用 |
| P3 了解(面试加分) | 访问者、解释器 | 平时很少用,但体现"知识面" |
本专栏按"由热到冷"顺序写,读者跟着学不会迷失。
六、大白商城项目介绍:你的"练兵场"
6.1 项目背景
大白商城是基于 Spring Cloud Alibaba 搭建的 B2C 电商平台,2024 年初上线,已稳定运行 2 年,扛过 618、双 11 等多次大促。日均订单 50 万 +,峰值 QPS 10 万 +。
这不是一个玩具项目,每个模块都跑在生产环境,每个模式都有真实业务背景。
6.2 核心 7 大模块
大白商城系统架构 │ ├── 用户中心(注册/登录/权限/SSO) │ └─ 实战模式:单例、代理、装饰器 │ ├── 商品中心(SPU/SKU/库存/价格/类目) │ └─ 实战模式:工厂方法、组合、享元、迭代器 │ ├── 订单中心(购物车/下单/状态机/售后) │ └─ 实战模式:策略、模板方法、状态、命令、责任链、备忘录 │ ├── 营销中心(优惠券/秒杀/拼团/满减) │ └─ 实战模式:策略、装饰器、组合、责任链、解释器、访问者 │ ├── 支付中心(多渠道/对账/退款) │ └─ 实战模式:工厂方法、策略、适配器 │ ├── 消息中心(通知/站内信/短信/推送) │ └─ 实战模式:观察者、中介者 │ └── 物流中心(运费/配送/轨迹) └─ 实战模式:策略、适配器、外观6.3 模式密度分布
| 模块 | 模式数 | 重点模式 |
|---|---|---|
| 订单中心 | 6 | 策略 / 模板方法 / 状态 / 命令 / 责任链 / 备忘录 |
| 营销中心 | 6 | 策略 / 装饰器 / 组合 / 责任链 / 解释器 / 访问者 |
| 商品中心 | 4 | 工厂方法 / 组合 / 享元 / 迭代器 |
| 用户中心 | 3 | 单例 / 代理 / 装饰器 |
| 支付中心 | 3 | 工厂方法 / 策略 / 适配器 |
| 消息中心 | 2 | 观察者 / 中介者 |
| 物流中心 | 3 | 策略 / 适配器 / 外观 |
订单中心 + 营销中心是"主战场",承担了 12 个模式的实战场景。这两个模块也是面试最爱问的(“讲讲你订单系统的设计”)。
七、技术栈:JDK 17 + Spring Boot 3 + Spring Cloud Alibaba
7.1 技术选型理由
| 技术 | 版本 | 选择理由 |
|---|---|---|
| JDK | 17 LTS | Java 长期支持版,Record / Sealed Class / Pattern Matching 等新特性 |
| Spring Boot | 3.2.x | Jakarta EE 9+,原生支持 JDK 17 |
| Spring Cloud | 2022.0.x | 配套 Spring Boot 3.x |
| Spring Cloud Alibaba | 2022.0.0.0 | 阿里出品,国内主流微服务套件 |
| 构建工具 | Maven 3.8+ | 业界主流 |
| 持久层 | MyBatis-Plus 3.5.x | 国内最流行的 ORM |
| 数据库 | MySQL 8.0 | 业界标准 |
| 缓存 | Redis 7.x | 高性能 KV |
| 消息队列 | RocketMQ 5.x | 阿里出品 |
| 注册/配置中心 | Nacos 2.x | 阿里出品 |
| 分布式事务 | Seata | 阿里出品 |
| 监控 | Spring Boot Actuator + Prometheus + Grafana | 业界标准 |
| 测试 | JUnit 5 + Mockito + Testcontainers | 现代化测试栈 |
7.2 代码规范
所有代码严格遵循:
- 《阿里巴巴 Java 开发手册》(黄山版)—— 命名、注释、异常、日志
- SonarQube 规则—— 代码异味检测
- Checkstyle—— 团队统一编码风格
本专栏不会出现"玩具代码"。每段代码都是生产级别,含完整import、异常处理、日志、单元测试。
7.3 完整 pom 依赖
所有模式文章都会给出可直接复制的pom.xml,例如:
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version><relativePath/></parent><groupId>com.dabai.mall</groupId><artifactId>mall-design-pattern</artifactId><version>1.0.0-SNAPSHOT</version><properties><java.version>17</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>八、50 篇学习路线图:4 阶段渐进式掌握
8.1 整体路线
0 开篇总览(本篇) │ ├── 阶段 1:创建型(10 篇,1~10) │ 01~10:单例 / 工厂方法 / 抽象工厂 / 建造者 / 原型 │ ├── 阶段 2:结构型(14 篇,11~24) │ 11~24:代理 / 适配器 / 装饰器 / 外观 / 组合 / 桥接 / 享元 │ ├── 阶段 3:行为型(22 篇,25~46) │ 25~46:策略 / 模板方法 / 观察者 / 责任链 / 命令 / 状态 / 中介者 / 迭代器 / 备忘录 / 访问者 / 解释器 │ ├── 阶段 4:综合实战(2 篇,47~48) │ 47:下单全链路(6 个模式组合) │ 48:营销全链路(6 个模式组合) │ └── 阶段 5:收官(2 篇,49~50) 49:Spring 源码中的设计模式全景 50:10 大反模式与避坑指南8.3 每篇文章结构
业务实战篇:
1. 业务场景引入(大白商城的真实需求) 2. 反面教材(不用模式的烂代码) 3. 模式原理(一句话本质 + 类比 + UML) 4. 实战代码(pom + import + 完整类 + 单元测试) 5. 避坑指南 + 工程决策 Checklist 6. 与其他模式协作 7. 本篇小结 + 下篇预告源码剖析篇:
1. 源码地图(这个模式在哪些经典框架出现过) 2. JDK 源码剖析(类名 + 行号 + 关键代码片段) 3. Spring 源码剖析(BeanFactory、ApplicationContext、AOP) 4. 中间件源码剖析(MyBatis / Dubbo / Spring Cloud Alibaba) 5. 为什么框架作者选这个模式(设计意图) 6. 借鉴到我们项目的方式(如何抄作业) 7. 本篇小结 + 下一模式预告8.4 推荐学习节奏
| 阶段 | 篇数 | 建议耗时 | 学习方式 |
|---|---|---|---|
| 阶段 1 | 10 | 2 周 | 每天 1 篇 + 写 demo |
| 阶段 2 | 14 | 3 周 | 每天 1 篇 + 重构一段老代码 |
| 阶段 3 | 22 | 4 周 | 每天 1 篇 + 思考自己项目 |
| 阶段 4 | 2 | 1 周 | 集中时间实战 |
| 阶段 5 | 2 | 3 天 | 回顾总结 |
总计约 10 周(每天 1~2 小时)可全部学完。
8.5 速通路线(给赶时间的同学)
如果你时间有限,先学这10 个最高频的:
01 单例-业务实战 → 03 工厂方法-业务实战 → 05 抽象工厂-业务实战 → 07 建造者-业务实战 → 11 代理-业务实战 → 13 适配器-业务实战 → 15 装饰器-业务实战 → 25 策略-业务实战 → 27 模板方法-业务实战 → 29 观察者-业务实战这 10 个覆盖了你工作中 80% 的场景,学完就敢写在简历上。
九、学习方法:3 个建议让你少走 2 年弯路
9.1 建议 1:不要背,要画图
错误的学法:把 23 个模式的定义背下来。
正确的学法:每学一个模式,画一张 UML 图 + 一段大白话解释。
为什么要画图?因为面试时画图比背定义加分 10 倍。
| 模式 | 一张图能画出来吗? | 画不出来 = 没真懂 |
|---|---|---|
| 单例 | 类图 + 私有构造 | — |
| 工厂方法 | 工厂 → 产品的箭头 | — |
| 观察者 | Subject → Observer* | — |
| 装饰器 | 嵌套包装 | — |
9.2 建议 2:先抄后改再创
学任何模式,三步走:
第 1 步:抄 把专栏代码完整复制下来,跑通。 重点是熟悉"骨架",不是理解每一行。 第 2 步:改 在大白商城的业务里试着改一改。 比如把"支付宝"换成"数字人民币",看代码怎么变。 第 3 步:创 找自己项目里的一段烂代码,用这个模式重构。 能用出来 = 真的学会了。只看不用 = 永远学不会。本专栏所有代码都建议手动敲一遍,不要复制粘贴。
9.3 建议 3:建立"模式索引表"
学完一个模式,在自己的笔记里记一行:
| 模式 | 一句话本质 | 大白商城场景 | 我项目里能用吗? | 学会日期 | |---|---|---|---|---| | 单例 | 全公司只有一个管家 | 配置中心 | 能 | 2026-07-20 | | 工厂方法 | 想造啥告诉我 | 多支付渠道 | 能 | 2026-07-21 |坚持记完 23 个,你的"模式感"就建立起来了。看到一段代码,能立刻反应"这里可以用 XX 模式"。
9.4 避坑提醒
❌不要在简单业务里硬套模式:
// 业务:发个短信通知// 反例:硬套策略模式publicinterfaceSmsStrategy{voidsend(Stringmsg);}publicclassAliyunSmsStrategyimplementsSmsStrategy{...}publicclassSmsContext{privateSmsStrategystrategy;publicvoidsend(Stringmsg){strategy.send(msg);}}// 实际上 1 个 if 就够了✅正确做法:先写简单代码,当 if-else 超过 3 个、或者预判要扩展时,再重构为模式。
专栏会反复强调"什么时候用、什么时候不用",避免你陷入"模式强迫症"。
十、本篇小结 + 下一篇文章预告
10.1 本篇小结(5 个核心要点)
- 设计模式 = 老司机处理问题的套路,不是死规矩,是行业最佳实践。
- SOLID 是母原则,23 个模式是 SOLID 的具体实现。
- 学模式 = 业务 + 面试 + 工程三个维度的复利。
- 大白商城是练兵场,每个模式都有真实业务背景。
- 先抄后改再创,光看不用永远学不会。
10.2 一句话总结
设计模式不是装 X,是救命。它让你从"会写代码"升级到"会设计代码",从"程序员"升级到"工程师"。
10.3 知识脑图
设计模式总览 ├── 为什么学 │ ├── 业务(可改/可读/可测) │ ├── 面试(大厂必考) │ └── 工程(行业术语) ├── SOLID 五原则 │ ├── S 单一职责 │ ├── O 开闭原则 │ ├── L 里氏替换 │ ├── I 接口隔离 │ └── D 依赖倒置 ├── 23 模式 │ ├── 创建型(5)= 对象怎么造 │ ├── 结构型(7)= 对象怎么组 │ └── 行为型(11)= 对象怎么协作 ├── 大白商城 │ ├── 7 大模块 │ └── 23 模式全覆盖 ├── 50 篇路线 │ ├── 阶段 1-3:23 模式 × 2 篇 │ ├── 阶段 4:综合实战 │ └── 阶段 5:收官 └── 学习方法 ├── 画图不背书 ├── 抄→改→创 └── 模式索引表10.4 下一篇文章预告
第 02 篇【单例模式 - 业务实战篇】:大白商城配置中心的"唯一管家"
下一篇我们会实战单例模式,回答 4 个问题:
- 大白商城为什么必须有个"唯一管家"?
- 不控制实例化会出什么事?(3 个反面教材)
- 单例模式的 5 种实现怎么选?
- 单例和 Spring Bean 的关系是什么?
并附完整的 pom 依赖、5 种实现代码、6 个单元测试,可直接复制到 IDEA 跑。
觉得对您有帮助,麻烦点点关注啦,您的关注是我创作的最大动力~ 🎯