跳到主要内容

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 模式的网络框架中,使用观察者模式注册事件回调;在插件系统中,使用策略模式加载不同插件逻辑。