FEATURED · 精选文章

大白话说Java设计模式-51-收官之作:10大反模式与持续学习路径

发布时间 / 2026/9/13 22:29:16
来源 / 创域科博编辑部
栏目 / 资讯中心
大白话说Java设计模式-51-收官之作:10大反模式与持续学习路径 大厂规范Java项目工具类 — 09_当前时间获取工具类Java企业级代码大白话说Java设计模式-51-收官之作10大反模式与持续学习路径一句话本质会用模式是入门不滥用模式才是大师。️ 标签收官 / 反模式 / 避坑指南 / 持续学习 适合所有 Java 工程师目录一、为什么需要反模式二、10 大反模式三、23 种模式总结脑图四、持续学习路径五、大白的最后寄语一、为什么需要反模式从 01 到 50我们讲了 23 种 GoF 设计模式 实战 源码 综合。但会用模式是入门不滥用模式才是大师。这一篇我们讲反模式——最常见的 10 种错误用法避坑指南。二、10 大反模式反模式 1模式滥用一上来就上模式症状/** * ❌ 反模式业务极简也上模式 */publicclassUserService{// 用户服务只查 DB业务简单// 但开发同学硬要加 5 个设计模式// 单例 工厂 策略 模板 装饰器// 类从 3 个变 30 个复杂度爆炸}危害类爆炸难维护性能下降正确做法业务简单直接写模式是为了解决复杂度不是为了展示技术反模式 2硬编码 if-else拒绝模式症状/** * ❌ 反模式硬编码 if-else */publicvoidpay(Stringchannel){if(alipay.equals(channel)){...}elseif(wechat.equals(channel)){...}elseif(unionpay.equals(channel)){...}// 5 个 if-else// 加新支付要改老代码}危害加新算法要改老代码难测试难维护正确做法3 个以上分支就用策略1-2 个分支用 if-else 没问题反模式 3上帝类一个类管所有症状/** * ❌ 反模式上帝类 */ServicepublicclassOrderService{publicvoidpay(){...}publicvoidship(){...}publicvoidcancel(){...}publicvoidrefund(){...}publicvoidimport(){...}publicvoidexport(){...}// 1000 行所有逻辑}危害维护噩梦改一处牵动全身测试困难正确做法单一职责按业务拆类反模式 4模式错配用错场景症状/** * ❌ 反模式把策略用成状态 */publicclassPaymentStrategy{publicvoidpay(){...}publicvoidrefund(){...}publicvoidcancel(){...}// 策略关注如何支付// 但加入了取消逻辑// 模糊了策略和命令的边界}危害模式作用错乱难以理解正确做法搞清楚模式边界策略 算法命令 操作状态 状态机反模式 5过度抽象一句话拆 5 个类症状/** * ❌ 反模式过度抽象 */publicinterfaceUserFactory{}publicinterfaceUserBuilder{}publicinterfaceUserStrategy{}publicinterfaceUserChain{}publicinterfaceUserVisitor{}// 加 1 个字段拆 5 个类危害类爆炸难追踪性能下降正确做法简单业务直接写模式是为了解决问题不是为了增加问题反模式 6忽视线程安全症状/** * ❌ 反模式线程不安全 */publicclassSingleton{privatestaticSingletoninstance;publicstaticSingletongetInstance(){if(instancenull){instancenewSingleton();// 多线程并发问题}returninstance;}}危害多线程 bug数据不一致难复现正确做法Double-Check Locking或静态内部类用 ConcurrentHashMap 而非 HashMap反模式 7破坏封装症状/** * ❌ 反模式破坏封装 */publicclassOrder{publicListOrderItemitems;// 公开字段publicBigDecimaltotal;// 公开字段// 外部直接改}危害状态不一致难追踪 bug正确做法private getter/setter不可变对象更安全反模式 8循环依赖症状/** * ❌ 反模式循环依赖 */ServicepublicclassA{AutowiredprivateBb;}ServicepublicclassB{AutowiredprivateAa;}危害启动失败内存泄漏正确做法用Lazy用ApplicationContext重新设计依赖反模式 9忽视性能症状/** * ❌ 反模式忽视性能 */publicclassOrder{// 100 万次订单每单都创建 5 个新对象publicListTaggetTags(){ListTagtagsnewArrayList();for(inti0;i5;i){tags.add(newTag(热销));// 5 × 100 万 500 万对象}returntags;}}危害内存爆GC 频繁正确做法用享元模式共享对象不可变对象对象池反模式 10不写单元测试症状/** * ❌ 反模式没单元测试 */ServicepublicclassOrderService{publicvoidpay(){...}// 没测试靠人工测}危害改一处全测Bug 频出正确做法每篇实战都有单元测试JUnit 5 Mockito测试覆盖率 80%三、23 种模式总结脑图3.1 全部 23 种GoF 23 种设计模式 │ ├── 创建型5 种 │ ├── 单例02-03— 节省内存 │ ├── 工厂方法04-05— 创建对象 │ ├── 抽象工厂06-07— 家族创建 │ ├── 建造者08-09— 复杂对象 │ └── 原型10-11— 克隆 │ ├── 结构型7 种 │ ├── 代理12-13— 远程调用 │ ├── 适配器14-15— 接口转换 │ ├── 装饰器16-17— 功能增强 │ ├── 外观18-19— 统一接口 │ ├── 组合20-21— 树形结构 │ ├── 桥接22-23— 抽象分离 │ └── 享元24-25— 共享对象 │ └── 行为型11 种 ├── 策略26-27— 算法切换 ├── 模板方法28-29— 流程固定 ├── 观察者30-31— 事件通知 ├── 状态32-33— 状态机 ├── 命令34-35— 操作封装 ├── 中介者36-37— 多对象协调 ├── 迭代器38-39— 统一遍历 ├── 备忘录40-41— 状态保存 ├── 访问者42-43— 操作分离 ├── 解释器44-45— 自定义语言 └── 责任链46-47— 多步处理3.2 优先级排序 极高P0 必学 ├── 单例 / 工厂方法 / 代理 ├── 策略 / 模板方法 / 观察者 └── 责任链 / 状态 中高 ├── 建造者 / 装饰器 / 适配器 ├── 外观 / 组合 / 命令 └── 享元 偏低 ├── 原型 / 桥接 / 中介者 ├── 迭代器 / 备忘录 / 访问者 └── 解释器 / 抽象工厂3.3 模式之间的关系单例 │ ↓ 工厂 ──→ 抽象工厂 │ ↓ 建造者 ──→ 原型 代理 ──→ 适配器 │ │ ↓ ↓ 装饰器 ──→ 外观 │ ↓ 组合 ──→ 桥接 │ ↓ 享元 策略 ──→ 模板方法 │ ↓ 观察者 ──→ 中介者 │ ↓ 状态 ──→ 命令 │ ↓ 迭代器 ──→ 备忘录 │ ↓ 访问者 ──→ 解释器 │ ↓ 责任链四、持续学习路径4.1 入门书单入门 ├── 《Head First 设计模式》图多易懂 ├── 《大话设计模式》程杰 └── 《设计模式之禅》秦小波4.2 进阶书单进阶 ├── 《设计模式可复用面向对象软件的基础》GoF 原版 ├── 《Effective Java》Joshua Bloch ├── 《深入理解 Java 虚拟机》周志明 └── 《代码整洁之道》Robert C. Martin4.3 高级书单高级 ├── 《Java 编程思想》Bruce Eckel ├── 《Spring 实战》Craig Walls ├── 《架构整洁之道》Robert C. Martin └── 《微服务设计》Sam Newman4.4 实战项目项目 ├── 仿 Spring手写 IOC / AOP / MVC ├── 仿 MyBatis手写 ORM ├── 仿 Dubbo手写 RPC ├── 仿 Spring Cloud微服务 └── 大白商城本系列实战4.5 社区社区 ├── GitHub开源 ├── Stack Overflow问答 ├── 掘金CSDN 替代 ├── CSDN本系列发布 └── 思否SegmentFault4.6 学习路径图学习路径 │ ├── 阶段 1入门1-2 个月 │ ├── 看 2-3 本入门书 │ ├── 跟着本系列实战 │ └── 写 5 个小项目 │ ├── 阶段 2进阶3-6 个月 │ ├── 读 GoF 原版 │ ├── 读 Spring 源码 │ ├── 仿写 Spring / MyBatis │ └── 参与开源项目 │ ├── 阶段 3高级6-12 个月 │ ├── 架构设计 │ ├── 微服务 │ ├── 性能优化 │ └── 技术布道 │ └── 阶段 4专家1-3 年 ├── 系统设计 ├── 技术决策 ├── 团队管理 └── 持续学习五、大白的最后寄语5.1 这个系列能给你什么51 篇 ≈ 300 个实战代码 100 个单元测试 ├── 23 种 GoF 设计模式系统讲解 ├── 每个模式含 4 问 5 反面教材 完整代码 ├── 源码剖析JDK / Spring / 中间件 ├── 3 大综合实战下单 / 营销 / 架构 └── 10 大反模式避坑指南5.2 学习建议├── 1️⃣ 别死记硬背理解场景 │ └── 模式是问题-方案对不是语法 │ ├── 2️⃣ 多写代码多看源码 │ └── 本系列所有代码可复制到 IDEA 跑 │ ├── 3️⃣ 用业务驱动学习 │ └── 看到 if-else 想到策略看到固定流程想到模板 │ ├── 4️⃣ 别滥用模式 │ └── 业务简单直接写模式是复杂度工具 │ └── 5️⃣ 持续学习 └── 设计模式只是起点5.3 一句话总结整个系列设计模式不是银弹是前人总结的场景-方案库。会模式是入门不滥用是大师。希望这个系列能帮你在 Java 之路上更进一步。5.4 致谢感谢你看到这里。希望对你有帮助。如果有任何问题欢迎在评论区交流。愿你在 Java 之路上一路顺风。 大白话说 Java 设计模式 - 完结 系列总结 ├── 23 种 GoF 设计模式 ├── 300 实战代码 ├── 100 单元测试 ├── 4 大综合实战 ├── 10 大反模式 └── 持续学习路径愿你成为更好的 Java 工程师。大白的最后一句代码改变世界设计让代码更美好。我们江湖再见。觉得对您有帮助麻烦点点关注啦您的关注是我创作的最大动力~
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻