GoF (Gang of Four) 行为模式涉及对象的算法以及对象的职责分配。行为模式还处理这些对象间的通信,并表示对象自身间的互连。这种互连可包括任务的继承和完成。
下表描述了各种 GoF 行为模式:
| 模式名称 | 处理的设计问题 | 角色 | 描述 |
|---|---|---|---|
| Chain of Responsibility | 通过为多个对象提供处理请求的机会,可以避免将请求的发送者与其接收者耦合起来。将接收对象链接在一起,并沿链传递请求,直到有对象处理它为止。 | Handler | 定义用于特定请求的抽象接口 |
| ConcreteHandler | 实现在 Handler 接口中声明的操作 | ||
| 客户端 | 通过一个具体处理来启动通信 | ||
| Command Pattern | 通过将请求封装为对象,您可以使用不同的请求将客户端参数化。您还可以将请求排队或建立请求的日志记录,以及支持可撤消操作。 | 命令 | 定义用于执行操作的抽象接口。 |
| ConcreteCommand | 实现在 Command 接口中声明的操作。 | ||
| 客户端 | 创建一个 ConcreteCommand 对象 | ||
| Invoker | 执行在 Command 派生对象中定义的接口 | ||
| 接收 | 执行所请求操作的具体实现 | ||
| Interpreter | 定义给定语言语法的表示法。interpreter 使用该表示法来解释使用此语言编写的句子。 | AbstractExpression | 定义在抽象语法树中所有节点都必须实现的抽象解释操作 |
| TerminalExpression | 提供解释操作的具体实现,该操作明确与语法中的终结符号关联。 | ||
| NonterminalExpression | 提供解释操作的具体实现,该操作明确与语法中的非终结符号关联 | ||
| Iterator | 提供一种统一机制来导航集合中的不同元素,但不显示导航元素的特定实现详细信息。 | Iterator | 定义用于导航元素的抽象接口。 |
| ConcreteIterator | 实现在 Iterator 接口中声明的操作 | ||
| Aggregate | 定义用于创建 ConcreteIterator 对象的抽象接口。 | ||
| ConcreteAggregate | 实现在 Aggregate 接口中声明的操作。 | ||
| Mediator | 提供一种统一机制来导航集合中的不同元素,但不显示导航元素的特定实现详细信息。 | Iterator | 定义用于导航元素的抽象接口。 |
| Concrete Iterator | 实现在 Iterator 接口中声明的操作 | ||
| Aggregate | 定义用于创建 ConcreteIterator 对象的抽象接口 | ||
| Concrete Aggregate | 实现在 Aggregate 接口中声明的操作 | ||
| Memento | 可以捕获对象的内部状态并将其外部化,使对象可在以后恢复到此状态。可以在不破坏封装的情况下完成此操作。 | Memento | 一个对象,用于管理给定时间点的 Originator 状态。 |
| Originator | 创建一个 Memento 对象,并在当前上下文中为其提供必需的状态信息。 | ||
| Caretaker | 聚合 Memento 对象。 | ||
| Observer | 在对象之间定义了一种一对多的依赖关系。如果一个对象的状态发生变化,则会自动通知并更新其所有相关对象。 | Subject | 定义用于将各个 Observer 连接到 Subject 的抽象接口。 |
| Observer | 定义更新 Observer 正在观察的 Subject 时所用的抽象接口。 | ||
| ConcreteSubject | 实现在 Subject 接口中声明的操作。 | ||
| ConcreteObserver | 实现在 Observer 接口中声明的操作。 | ||
| 状态 | 它提供了一种机制,允许对象在内部状态发生变化时改变其行为。 | 上下文 | 定义客户端用来访问 Context 状态的接口。 |
| 状态 | 定义 ConcreteState 必须实现的抽象接口。此接口是域特定的接口 | ||
| ConcreteState | 实现在 State 接口中声明的操作 | ||
| Strategy | 定义一系列算法,封装每个算法,这些算法可以互换。算法可以有所改变,但不受使用它的客户端影响。 | Strategy | 定义由 ConcreteStrategy 对象实现的抽象接口 |
| ConcreteStrategy | 实现在 Strategy 接口中声明的操作。 | ||
| 上下文 | 聚合实现 Strategy 接口的对象 | ||
| TemplateMethod | 定义操作中的算法框架,并将某些步骤委托给子类。子类可以在不更改算法结构的情况下重新定义算法的某些步骤。 | AbstractClass | 定义可由 ConcreteClass 覆盖的各种操作。 |
| ConcreteClass | 实现在 AbstractClass 中定义的特定操作。 | ||
| Visitor | Visitor 表示一种要对对象结构元素执行的操作。您可以定义一种新的操作,而不更改对其进行操作的元素的类。 | Visitor | 提供针对具体元素的操作,这些操作允许此 Visitor 对象对其进行访问。 |
| ConcreteVisitor | 实现在 Visitor 接口中声明的操作。 | ||
| 元素 | 声明一个 Accept 操作,此操作允许 Visitor 对象处理当前元素。 | ||
| ConcreteElement | 实现在 Element 接口中声明的操作。 | ||
| ObjectStructure | 管理 ConcreteVisitor 和 ConcreteElement 对象之间的协作。 |