实践GoF的23种设计模式:命令模式

时间:2022-12-28 12:09:50
摘要:命令模式可将请求转换为一个包含与请求相关的所有信息的对象, 它能将请求参数化、延迟执行、实现 Undo / Redo 操作等。

本文分享自华为云社区《【Go实现】实践GoF的23种设计模式:命令模式》,作者:元闰子。

简介

现在的软件系统往往是分层设计。在业务层执行一次请求时,我们很清楚请求的上下文,包括,请求是做什么的、参数有哪些、请求的接收者是谁、返回值是怎样的。相反,基础设施层并不需要完全清楚业务上下文,它只需知道请求的接收者是谁即可,否则就耦合过深了。

因此,我们需要对请求进行抽象,将上下文信息封装到请求对象里,这其实就是命令模式,而该请求对象就是 Command。

GoF 对命令模式(Command Pattern)的定义如下:

Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.

也即,命令模式可将请求转换为一个包含与请求相关的所有信息的对象, 它能将请求参数化、延迟执行、实现 Undo / Redo 操作等

上述的请求是广义上的概念,可以是网络请求,也可以是函数调用,更通用地,指一个动作

命令模式主要包含 3 种角色:

  1. Command,命令,是对请求的抽象。具体的命令实现时,通常会引用 Receiver。
  2. Invoker,请求的发起发起方,它并不清楚 Command 和 Receiver 的实现细节,只管调用命令的接口。
  3. Receiver,请求的接收方。
实践GoF的23种设计模式:命令模式