行为模式

一、行为模式的第一性原理

1. 什么是“行为”?

在软件系统中,行为 = 在特定上下文中,对请求或事件做出的响应方式

行为设计的核心矛盾并不在于“怎么写代码”,而在于以下问题:

行为模式,本质上是对这些问题的不同回答。


二、行为模式的本质问题空间(总览模型)

从第一性原理出发,GOF 行为模式可以归入 5 类稳定问题空间:

2.1 行为由谁决定?(Decision Ownership)

核心矛盾:行为切换的控制权是在对象内部,还是在对象外部?


2.2 行为如何传播?(Behavior Propagation)

核心矛盾:请求或事件是逐级传递、集中调度,还是去中心广播


2.3 行为是否需要对象化?(Behavior as Object)

核心矛盾:行为是否需要被记录、排队、撤销、组合、持久化


2.4 行为是否依赖稳定结构?(Structural Stability Assumption)

核心矛盾:是“数据结构稳定,操作常变”,还是“结构与行为一起变化”?


2.5 行为如何被遍历?(Traversal Control)

核心矛盾:遍历控制权在使用者还是数据结构本身


三、模式级重构(从“定义”到“设计哲学”)

以下不再重复教科书式定义,而统一采用:


四、行为切换类模式

4.1 状态模式(State)

本质问题

行为随内部状态变化而变化,避免条件分支爆炸。

设计哲学

引入的代价

稳定前提

工程判断信号


4.2 策略模式(Strategy)

本质问题

在不修改上下文的前提下,替换不同算法或行为。

设计哲学

引入的代价

稳定前提

工程判断信号


五、行为传播类模式

5.1 责任链(Chain of Responsibility)

本质问题

请求的处理者不确定,需要在多个处理者之间动态传递责任。

设计哲学

关键特性

引入的代价

工程判断信号


5.2 中介者(Mediator)

本质问题

多对象交互形成网状依赖,导致系统失控。

设计哲学

引入的代价

工程判断信号


5.3 观察者(Observer)

本质问题

状态变化需要通知多个依赖方。

设计哲学

引入的代价

工程判断信号


六、行为对象化与结构化模式

6.1 命令(Command)

本质问题

将“请求”本身作为一等对象对待。

设计哲学

引入的代价

工程判断信号


6.2 模板方法(Template Method)

本质问题

算法结构稳定,局部步骤易变。

设计哲学

引入的代价

工程判断信号


七、结构稳定性假设类模式

7.1 访问者(Visitor)

本质问题

在不修改数据结构的前提下,增加新行为。

设计哲学

引入的代价

工程判断信号


7.2 解释器(Interpreter)

本质问题

用对象结构表示语法规则并执行。

设计哲学

工程判断信号


八、遍历控制类模式

8.1 迭代器(Iterator)

本质问题

在不暴露内部结构的情况下遍历集合。

设计哲学


九、模式对比速查矩阵

维度状态策略命令责任链
行为决定者对象自身客户端调用者链路
是否可撤销
行为对象化
状态关联性

十、现代架构中的行为模式映射


十一、结语:行为模式的真正价值

行为模式不是为了“多用设计模式”,而是为了用更低的认知成本,管理系统行为复杂性

使用行为模式前先问:

关联内容(自动生成)