当前位置: 首页 > news >正文

0设计模式使用场景

文章目录

      • 1. 单例模式(Singleton)
      • 2. 工厂模式 / 简单工厂 / 抽象工厂
      • 3. 策略模式(Strategy)高频!
      • 4. 模板方法模式(Template Method)
      • 5. 代理模式(Proxy)
      • 6. 装饰器模式(Decorator)
      • 7. 观察者模式(Observer)
      • 8. 建造者模式(Builder)
      • 9. 适配器模式(Adapter)
      • 10. 责任链模式(Chain of Responsibility)

1. 单例模式(Singleton)

用到的地方:

  • Spring 中 Bean 默认 singleton
  • 工具类:RedisUtil、ExcelUtil、DateUtil
  • 线程池、工厂类、配置类
  • 全局异常处理器、拦截器

一句话:全局唯一、避免重复创建、节约资源。

2. 工厂模式 / 简单工厂 / 抽象工厂

用到的地方:

  • Spring BeanFactory、ApplicationContext
  • MyBatis SqlSessionFactory
  • 线程池工厂 Executors
  • 多数据源切换
  • 支付渠道工厂(支付宝/微信/银联)

一句话:封装对象创建,统一管理,便于扩展。

3. 策略模式(Strategy)高频!

用到的地方:

  • 不同支付方式
  • 不同文件解析策略(Excel/PDF/Word)
  • 不同消息推送(短信/邮件/站内信)
  • 权限校验策略、日志存储策略
  • 若依中多类型字典解析、导出策略

一句话:消除大量 if-else,符合开闭原则。

4. 模板方法模式(Template Method)

用到的地方:

  • MyBatis BaseMapper
  • Spring JdbcTemplate
  • 通用业务流程:校验 → 处理 → 日志 → 通知
  • 若依的 BaseController、BaseService

一句话:固定流程骨架,子类只实现差异步骤。

5. 代理模式(Proxy)

用到的地方:

  • Spring AOP(日志、事务、权限)
  • MyBatis Mapper 代理
  • 分布式锁代理、缓存代理
  • 异步方法代理 @Async

一句话:不修改原代码,增强功能。

6. 装饰器模式(Decorator)

用到的地方:

  • Java IO 流(BufferedInputStream 包裹 FileInputStream)
  • 缓存装饰、日志装饰
  • 请求/响应包装类

一句话:动态增强对象功能,比继承更灵活。

7. 观察者模式(Observer)

用到的地方:

  • 消息队列发布订阅
  • Spring Event 事件机制
  • 订单创建后触发:扣库存、发短信、push
  • 网关、监听配置变更

一句话:一对多通知,解耦触发与执行。

8. 建造者模式(Builder)

用到的地方:

  • Lombok @Builder
  • StringBuilder、StringBuffer
  • 统一返回对象 AjaxResult.build()
  • 复杂查询条件构建

一句话:分步构建复杂对象,代码优雅。

9. 适配器模式(Adapter)

用到的地方:

  • Spring MVC HandlerAdapter
  • 第三方接口适配(统一返回格式)
  • 老系统接口兼容新系统

一句话:把不兼容接口转成统一标准。

10. 责任链模式(Chain of Responsibility)

用到的地方:

  • 过滤器 Filter、拦截器 Interceptor
  • Spring Security 权限链
  • 审批流、多级审核
  • 参数校验、日志、签名、防重提交链路

目的是提高代码可维护性、可扩展性,降低耦合,符合开闭原则。

http://www.jsqmd.com/news/598494/

相关文章:

  • BRS——斯坦福李飞飞团队推出的全身轮式人形操作框架:推出遥操作接口JoyLo与全身视觉-运动注意策略WB-VIMA
  • 基于人为风险管控的钓鱼邮件综合防御体系研究
  • 每日安全情报报告 · 2026-04-06
  • 硬件知识--电感篇
  • 网工运维有必要“养龙虾”吗?
  • UniApp实战:集成高德与百度地图实现跨平台智能导航
  • 2026年防爆吸料机生产厂家年度评测:优质供应商产品与售后对比 - 品牌推荐大师
  • 笔记2——HTTP协议,Get,Post请求,URL的编码和解码
  • 实战对比:OLLVM在LLVM 18下的指令替换、控制流平坦化等混淆效果到底如何?
  • 告别模组管理烦恼:Lumafly让空洞骑士模组体验升级
  • 基于 EvilTokens 工具集的微软设备码钓鱼攻击机理与防御研究
  • 谷歌开源Gemma 4:256K原生多模态,免费商用
  • 基于PLC的私人车库自动门设计与实现——博图1200软件编程应用详解,含梯形图、组态动画及接线...
  • 别再傻傻拖拽了!Unity Scene视图里这个右键菜单,藏着实时预览摄像头的秘密
  • 【lvgl】配置lvgl如何运行在window中
  • 【27】软考软件设计师——数据流图(DFD)补全题满分精讲|下午15分大题深度拆解
  • JAVA重点基础、进阶知识及易错点总结(33)设计模式(代理、装饰器)
  • 开源工具ncmdump:3步解锁加密音乐,让网易云NCM文件在全设备自由播放
  • Qwen2.5-7B+vLLM离线推理实战:解决V100显卡兼容性问题
  • 避坑指南:RK3588以太网调试那些‘看起来通了但实际没通’的坑(附千兆网线识别与ifconfig -a用法)
  • 3步解锁QQ音乐加密文件:qmc-decoder让音乐真正属于你
  • 软测学习笔记|2026.4.4|错误推测法|因果图(2)
  • 路径规划算法仿真:A星算法详解及改进研究,包括效率提升、冗余拐角优化与路径平滑处理,可量化对比...
  • CNN卷积神经网络算法原理
  • 永磁同步电机无位置传感器矢量控制系统功能详解
  • 开源工具Wand-Enhancer:WeMod核心功能免费解锁与安全使用指南
  • 用Python+OpenCV重构九点标定:抛弃Halcon的轻量化视觉方案
  • 你的第一个Todo List项目藏着这些坑:HTML+CSS+JS新手避雷指南
  • 告别ifconfig手忙脚乱:MobaXterm一键SSH连接VMware Ubuntu的保姆级图解
  • LangChain 官方出手了:这个 Agent 框架自带规划、文件系统和子 Agent 派发