工作中最常用的8种设计模式

工作中最常被使用的设计模式因语言、框架和领域(后端、前端、架构等)略有差异,但综合实际项目经验(特别是Java/Spring、后端业务系统、互联网中台等场景),以下 8种 是出现频率最高、最实用的设计模式,几乎每个有一定规模的项目都会用到其中几种。

我按实际使用频率从高到低大致排序,并附上最常见的真实应用场景:

  1. 单例模式 (Singleton)
    使用频率:★★★★★
    几乎所有项目都会用到。
    典型场景:
  • 配置管理器
  • 线程池
  • 缓存管理器
  • 数据库连接池
  • Spring中Bean默认就是单例
  • 日志工具类、ID生成器等
  1. 工厂模式 (Factory) —— 包含简单工厂、工厂方法、抽象工厂
    使用频率:★★★★☆
    核心目的是封装创建逻辑,解耦。
    典型场景:
  • Spring的BeanFactory
  • 各种Service/Repository的创建
  • 支付方式工厂(微信、支付宝、银联)
  • 日志工厂、文件存储工厂(OSS、MinIO、本地)
  • 不同环境下的配置工厂
  1. 代理模式 (Proxy)
    使用频率:★★★★☆
    现代开发中出现最多的是动态代理
    典型场景:
  • Spring AOP(事务、日志、权限、缓存、限流、埋点等)
  • MyBatis的Mapper代理
  • RPC框架中的客户端代理(如Dubbo、Feign)
  • 延迟加载
  • 虚拟代理、保护代理
  1. 观察者模式 (Observer) / 发布-订阅模式
    使用频率:★★★★
    解耦最彻底的一种行为型模式。
    典型场景:
  • Spring事件机制(ApplicationEvent)
  • 订单状态变更通知(发短信、推送、积分、库存回滚)
  • MQ消息订阅
  • GUI事件监听
  • Webhook机制
  1. 策略模式 (Strategy)
    使用频率:★★★★
    最能体现“面向接口编程”的模式之一。
    典型场景:
  • 支付策略(微信、支付宝、余额、积分支付)
  • 优惠券/促销计算策略
  • 不同渠道的价格计算策略
  • 排序策略(多种排序规则切换)
  • 风控规则策略
  1. 装饰器模式 (Decorator)
    使用频率:★★★☆
    比继承更灵活的“运行时增强”方式。
    典型场景:
  • Spring Cache + @Transactional 组合(多层代理)
  • IO流(BufferedInputStream装饰InputStream)
  • 日志 + 耗时统计 + 权限校验层层装饰
  • 咖啡店加料(原味咖啡 + 牛奶 + 糖 + 巧克力)
  1. 模板方法模式 (Template Method)
    使用频率:★★★☆
    框架中最常见的设计。
    典型场景:
  • Spring中各种Template类(JdbcTemplate、RedisTemplate、RestTemplate)
  • Servlet的service()方法
  • 测试框架的setUp → 测试 → tearDown
  • 批量任务的模板(校验 → 执行 → 记录日志 → 异常处理)
  1. 建造者模式 (Builder)
    使用频率:★★★
    主要解决复杂对象构造问题。
    典型场景:
  • MyBatis的Example类(链式调用)
  • StringBuilder / StringBuffer
  • Lombok的@Builder
  • HTTP请求构建(OkHttp Request.Builder)
  • 复杂DTO/VO/Param对象构造
  • 配置对象构建(大量可选参数)

快速对照表(最常见使用场景)

排名设计模式出现最频繁的真实场景框架/技术中的典型体现
1单例配置、缓存、连接池Spring Bean默认单例
2工厂对象创建解耦BeanFactory, Service工厂
3代理横切关注点(AOP)Spring AOP、MyBatis Mapper
4观察者事件解耦、状态通知Spring事件、MQ订阅
5策略多种算法/规则切换支付、促销、风控规则
6装饰器运行时功能增强IO流、Spring多重代理
7模板方法固定流程 + 部分自定义*Template系列类
8建造者复杂对象构造(大量可选参数)Lombok @Builder、Request.Builder

小结建议

  • 初中级开发:熟练掌握前5种(单例、工厂、代理、观察者、策略)已经能应对80%以上的日常开发场景。
  • 中高级开发:后3种 + 责任链 + 适配器 + 外观 + 状态 等组合使用,能让代码更优雅、可维护。
  • 真正高手不是死记硬背23种模式,而是“在合适的地方自然地用对模式”,而不是为了用模式而用。

你目前工作中用得最多的是哪几种?或者你主要做哪个方向(后端/前端/大数据/架构)?可以聊聊,我可以给你更针对性的例子。

文章已创建 4391

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部