拓冰建站拓冰建站
首页 / 资讯中心 / 正文

大白话说Java设计模式-01-开篇总览(附50篇学习路线图)

大白话说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 年GoFGang 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){returnab;}}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{privateMysqlUserRepositoryuserReponewMysqlUserRepository();// 改数据库类型改 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/小程序/H504建造者创建型像搭积木一样造复杂对象复杂订单对象构造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 Alibaba7.1 技术选型理由技术版本选择理由JDK17 LTSJava 长期支持版Record / Sealed Class / Pattern Matching 等新特性Spring Boot3.2.xJakarta EE 9原生支持 JDK 17Spring Cloud2022.0.x配套 Spring Boot 3.xSpring Cloud Alibaba2022.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 version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.0/versionrelativePath//parentgroupIdcom.dabai.mall/groupIdartifactIdmall-design-pattern/artifactIdversion1.0.0-SNAPSHOT/versionpropertiesjava.version17/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/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 49Spring 源码中的设计模式全景 5010 大反模式与避坑指南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 推荐学习节奏阶段篇数建议耗时学习方式阶段 1102 周每天 1 篇 写 demo阶段 2143 周每天 1 篇 重构一段老代码阶段 3224 周每天 1 篇 思考自己项目阶段 421 周集中时间实战阶段 523 天回顾总结总计约 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-323 模式 × 2 篇 │ ├── 阶段 4综合实战 │ └── 阶段 5收官 └── 学习方法 ├── 画图不背书 ├── 抄→改→创 └── 模式索引表10.4 下一篇文章预告第 02 篇【单例模式 - 业务实战篇】大白商城配置中心的唯一管家下一篇我们会实战单例模式回答 4 个问题大白商城为什么必须有个唯一管家不控制实例化会出什么事3 个反面教材单例模式的 5 种实现怎么选单例和 Spring Bean 的关系是什么并附完整的 pom 依赖、5 种实现代码、6 个单元测试可直接复制到 IDEA 跑。觉得对您有帮助麻烦点点关注啦您的关注是我创作的最大动力~
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门