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