0设计模式使用场景

文章目录

      • [1. 单例模式(Singleton)](#1. 单例模式(Singleton))
      • [2. 工厂模式 / 简单工厂 / 抽象工厂](#2. 工厂模式 / 简单工厂 / 抽象工厂)
      • [3. 策略模式(Strategy)高频!](#3. 策略模式(Strategy)高频!)
      • [4. 模板方法模式(Template Method)](#4. 模板方法模式(Template Method))
      • [5. 代理模式(Proxy)](#5. 代理模式(Proxy))
      • [6. 装饰器模式(Decorator)](#6. 装饰器模式(Decorator))
      • [7. 观察者模式(Observer)](#7. 观察者模式(Observer))
      • [8. 建造者模式(Builder)](#8. 建造者模式(Builder))
      • [9. 适配器模式(Adapter)](#9. 适配器模式(Adapter))
      • [10. 责任链模式(Chain of Responsibility)](#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 权限链
  • 审批流、多级审核
  • 参数校验、日志、签名、防重提交链路

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

相关推荐
玖玥拾19 小时前
C/C++ 基础笔记(十一)类的进阶
c语言·c++·设计模式·
geovindu1 天前
go: Broadcast Pattern
开发语言·后端·设计模式·golang·广播模式
我爱cope1 天前
【Agent智能体23 | 规划-规划工作流】
人工智能·设计模式·语言模型·职场和发展
lengjingzju1 天前
符·形·音·意(SFEM):一种面向通用智能的四维认知架构
设计模式·ai·学习方法
贵慜_Derek1 天前
《从零实现 Agent 系统》连载 23|Skill 体系与 Skill Creator:能力打包与迭代
人工智能·设计模式·架构
张小姐的猫1 天前
【Linux】多线程 —— 线程池 | 单例模式 | 常见锁
linux·运维·服务器·c++·单例模式·设计模式·策略模式
老码观察1 天前
设计模式实战解读(十二):状态模式——干掉状态机里的 if-else 地狱
设计模式·状态模式
我爱cope1 天前
【Agent智能体24 | 规划-创建和执行LLM计划】
人工智能·设计模式·语言模型·职场和发展
Hillain1 天前
软件设计师设计模式
java·开发语言·经验分享·笔记·算法·设计模式·软考
zhengfei6112 天前
第3章 Agent 类型分类与设计模式
设计模式