架构风格与模式58 条

GoF 设计模式分类

经典设计模式分为创建型、结构型与行为型共 23 种;模式是交流词汇与重构目标,引入前应先确认存在对应变化点,避免为模式而模式。

GoF 模式是什么

《设计模式》一书归纳了 23 种经典模式,分为创建型、结构型与行为型三类,解决对象创建、组合与交互中的常见变化点。它们是团队间的交流词汇与重构目标,不是必须套用的清单。引入模式前应先确认存在对应的变化点:没有变化点而套用模式,只会增加间接层与理解成本。

分类

分类数量代表模式
创建型5工厂方法、抽象工厂、建造者、原型、单例
结构型7适配器、桥接、组合、装饰器、外观、享元、代理
行为型11策略、观察者、命令、状态、模板方法、责任链、访问者等

基本信息

适用平台语言无关,面向对象语言均有对应实现
核心价值提供共同词汇、指向可复用的结构与取舍经验
引入前提先确认变化点与扩展方向,再选择模式
现代替代部分模式已被语言特性吸收,如函数式一等函数替代策略类
常见替代依赖注入管理生命周期,弱化单例模式的作用

典型使用场景

  • 多种支付渠道:用策略模式封装差异,调用方不写分支判断
  • 第三方对接:用适配器隔离外部 SDK,便于替换与测试
  • 对象创建复杂:用建造者组织多参数构造,避免长参数列表
  • 请求链处理:用责任链处理审批、风控等逐级判定
  • 跨层通知:用观察者解耦变更发布与订阅处理
  • 遗留代码重构:用模式词汇描述现存结构,明确改进方向

常见误用

模式误用表现更合适的做法
单例到处全局访问,测试困难依赖注入统一管理生命周期
工厂方法为唯一实现预建工厂直接在组合根构造对象
装饰器层层包裹后堆栈难以阅读控制包裹层数,保留日志说明
访问者数据结构稳定但行为频繁变化却未评估先确认变化维度是否匹配
抽象工厂同一产品族只有一个实现简化为普通构造逻辑
模式是重构的结果而不是起点:先写出清晰直接的代码,在变化点真的出现时再做形态调整,比预先铺满模式更容易维护。
单例在并发与测试中问题较多,现代实践更倾向用依赖注入管理对象生命周期。

易错点

  • 为模式而模式,代码里出现大量只有单一实现的抽象工厂与策略类
  • 在需求尚未稳定时预定整套模式结构,变化点判断错误导致返工
  • 用设计模式替代架构决策,分布式一致性等问题无法靠模式解决
  • 团队对模式命名理解不一致,评审时各说各话,沟通成本上升
  • 只用模式名词描述问题而不写清变化点与后果,讨论停留在术语层面

数据来源与参考

  • Gamma, Helm, Johnson, Vlissides《Design Patterns: Elements of Reusable Object-Oriented Software》(1994)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌