命令模式

1. 环境

  • 回想吃烧烤流程,多个客户,多个厨师。
  • 客户想要吃5个烤鸡腿,10个烤羊肉串。

2. 问题

  • 背景:一个用户要对多个目标进行调用,而且目标对象的操作相似。
  • 用户使用的复杂性加大,目标的执行效率会比较低
  • 增加目标的使用者的话,逻辑较复杂。
  • 互动关系不能体现成类之间的直接调用,对象之间关系的耦合度大

3. 详解

3.1. command pattern

  • 让行为的发送者执行者完全解耦
  • 当用户发出命令后,无需关注谁来执行命令,有转发者来进行命令的调配和转发。
  • 将命令的发出者和命令的执行者完全隔离开。

3.2. 角色

  • Command:定义命令的接口,声明执行的方法。
  • ConcreteCommand:命令接口实现对象, 通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。
  • Receiver:接收者,真正执行命令的对象。
  • Invoker:传递者,要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。
  • Client:创建具体的命令对象,并且设置命令对象的接收者。组装命令对象和接收者,因为真正使用命令的客户端是从Invoker来触发执行。

客户端发出命令给传递者,传递者把命令传递给真正执行命令的执行者去执行操作。

命令模式有很多种实现形式,比较常见的一种是“客户下达命令-----传达者接收,并传递给执行者----执行者接收到命令,执行命令”。

commandstep
图:commandstep
commanduml
图:commanduml

4. 实现

commandrealization
图:commandrealization
© 2019 冯世祺. All rights reserved.