跳到主要内容

GoF 之外的设计模式

在学习设计模式的过程中,你可能听说过一些“非主流”的名字,比如 Reactor 模式、插件模式、数据驱动模式、MVC、微内核架构等等。这些名称虽然没有出现在《设计模式:可复用面向对象软件的基础》这本经典书籍中,但它们同样扮演着重要角色,常用于实际项目开发中。

那么,这些模式属于设计模式吗?答案是:是的,它们属于广义上的设计模式

提示

如果 GoF 设计模式是“语言的语法”,那么架构模式、并发模式等就是“写作技巧与文体”,两者互补,共同组成软件设计的完整知识体系。

GoF 设计模式是什么?

GoF(Gang of Four,四人帮)指的是 Erich Gamma 等四位作者,他们在 1994 年出版了《设计模式》这本经典书籍,总结了 23 种面向对象编程中的常用设计模式,被广泛认为是学习设计模式的起点。

这 23 种模式分为:

  • 创建型(如:单例、工厂方法、建造者)
  • 结构型(如:适配器、桥接、组合、装饰器)
  • 行为型(如:观察者、代理、策略、命令、状态)

这些模式关注的是类与对象之间的协作方式,帮助你编写可复用、可扩展、可维护的面向对象代码。

GoF 之外的设计模式

GoF 模式虽然经典,但在实践中,我们还会遇到许多 GoF 之外的设计思维与模式,它们通常更偏向于:

  • 系统架构级别的设计
  • 并发与异步处理
  • 插件化与模块化
  • 配置驱动与数据驱动
  • 分布式与微服务场景

这些也被广泛认为是设计模式的一部分。

常见的非 GoF 设计模式

下面是一些常见的 GoF 之外的模式类别与代表模式:

1️⃣ 并发 / 响应式模式

模式名说明
Reactor基于事件驱动和非阻塞 I/O,适合处理高并发连接(如 Netty、Java NIO)。
Proactor类似 Reactor,但将执行责任交给操作系统,如 Windows IOCP。
Actor 模式把并发单元抽象成 Actor,每个 Actor 有独立的状态和消息队列(如 Erlang、Akka)。
线程池模式用线程池复用线程资源,避免频繁创建销毁线程。

2️⃣ 架构模式

模式名说明
MVC / MVVM / MVP将界面逻辑与业务逻辑分离,提高代码可维护性。
插件模式(Microkernel)提供一个可扩展的核心,允许通过插件方式扩展功能(如浏览器插件、IDE 插件)。
管道/过滤器模式将处理过程拆分为多个步骤(过滤器),组成一条数据管道。
微服务架构模式将系统拆分成一组独立部署的小服务,每个服务负责特定业务能力。

3️⃣ 配置与数据驱动类模式

模式名说明
数据驱动模式用数据(如配置表)来驱动逻辑,而不是硬编码(如游戏技能系统、表单引擎)。
规则引擎模式将规则提取出来,由非程序员配置运行逻辑(如权限系统、优惠规则)。
DSL 模式使用领域专属语言让业务逻辑更清晰,如正则表达式、SQL、配置语言等。

4️⃣ 分布式系统模式

模式名说明
服务发现动态发现服务的位置(如 Consul、Eureka)。
断路器模式防止服务级联故障(如 Netflix Hystrix)。
限流与熔断控制访问速率,保障系统稳定性。

它们和 GoF 模式有什么不同?

维度GoF 模式其他模式
层级面向对象代码层更高层次(系统、架构、平台)
范围通用编程语言结构针对并发、架构、业务、平台等
粒度类、对象、方法模块、线程、服务、配置等
学习价值构建良好的基础扩展视野,应对实际复杂场景

小结

总的来说,GoF 模式是“代码设计”的基础,其他模式是“架构设计”的扩展。掌握 GoF 模式能让你写出优雅、可维护的代码,而了解 Reactor、插件、数据驱动等模式,则能让你应对更复杂、更真实的项目需求。

在实际开发中,你会发现两者并不矛盾,而是相辅相成。比如你可以在 Reactor 模式的网络框架中,使用观察者模式注册事件回调;在插件系统中,使用策略模式加载不同插件逻辑。