摘要:命令模式可将请求转换为一个包含与请求相关的所有信息的对象, 它能将请求参数化、延迟执行、实现 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 种角色:
- Command,命令,是对请求的抽象。具体的命令实现时,通常会引用 Receiver。
- Invoker,请求的发起发起方,它并不清楚 Command 和 Receiver 的实现细节,只管调用命令的接口。
- Receiver,请求的接收方。