工作中最常被使用的设计模式因语言、框架和领域(后端、前端、架构等)略有差异,但综合实际项目经验(特别是Java/Spring、后端业务系统、互联网中台等场景),以下 8种 是出现频率最高、最实用的设计模式,几乎每个有一定规模的项目都会用到其中几种。
我按实际使用频率从高到低大致排序,并附上最常见的真实应用场景:
- 单例模式 (Singleton)
使用频率:★★★★★
几乎所有项目都会用到。
典型场景:
- 配置管理器
- 线程池
- 缓存管理器
- 数据库连接池
- Spring中Bean默认就是单例
- 日志工具类、ID生成器等
- 工厂模式 (Factory) —— 包含简单工厂、工厂方法、抽象工厂
使用频率:★★★★☆
核心目的是封装创建逻辑,解耦。
典型场景:
- Spring的BeanFactory
- 各种Service/Repository的创建
- 支付方式工厂(微信、支付宝、银联)
- 日志工厂、文件存储工厂(OSS、MinIO、本地)
- 不同环境下的配置工厂
- 代理模式 (Proxy)
使用频率:★★★★☆
现代开发中出现最多的是动态代理。
典型场景:
- Spring AOP(事务、日志、权限、缓存、限流、埋点等)
- MyBatis的Mapper代理
- RPC框架中的客户端代理(如Dubbo、Feign)
- 延迟加载
- 虚拟代理、保护代理
- 观察者模式 (Observer) / 发布-订阅模式
使用频率:★★★★
解耦最彻底的一种行为型模式。
典型场景:
- Spring事件机制(ApplicationEvent)
- 订单状态变更通知(发短信、推送、积分、库存回滚)
- MQ消息订阅
- GUI事件监听
- Webhook机制
- 策略模式 (Strategy)
使用频率:★★★★
最能体现“面向接口编程”的模式之一。
典型场景:
- 支付策略(微信、支付宝、余额、积分支付)
- 优惠券/促销计算策略
- 不同渠道的价格计算策略
- 排序策略(多种排序规则切换)
- 风控规则策略
- 装饰器模式 (Decorator)
使用频率:★★★☆
比继承更灵活的“运行时增强”方式。
典型场景:
- Spring Cache + @Transactional 组合(多层代理)
- IO流(BufferedInputStream装饰InputStream)
- 日志 + 耗时统计 + 权限校验层层装饰
- 咖啡店加料(原味咖啡 + 牛奶 + 糖 + 巧克力)
- 模板方法模式 (Template Method)
使用频率:★★★☆
框架中最常见的设计。
典型场景:
- Spring中各种Template类(JdbcTemplate、RedisTemplate、RestTemplate)
- Servlet的service()方法
- 测试框架的setUp → 测试 → tearDown
- 批量任务的模板(校验 → 执行 → 记录日志 → 异常处理)
- 建造者模式 (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种模式,而是“在合适的地方自然地用对模式”,而不是为了用模式而用。
你目前工作中用得最多的是哪几种?或者你主要做哪个方向(后端/前端/大数据/架构)?可以聊聊,我可以给你更针对性的例子。