命令模式

136 阅读1分钟

餐厅下单流程

  1. 订单有一个统一的orderUp()接口,可以被传递
  2. 女招待的takeOrder()可以传入用户的不同订单作为参数
  3. 女招待不用知道订单有什么,不需要知道谁来准备餐点
  4. 女招待将订单传递给厨师时,只要调用订单的orderUp()即可
  5. 厨师是真正处理订单的对象,不需要和女招待有直接沟通,即女招待和厨师解耦

命令模式流程

  1. Command 有 execute()接口
  2. 客户创建一个命令对象,通过setCommand()传递给Inoker
  3. Invoker不需要知道Command是什么,不需要知道具体的 Receiver是什么
  4. Invoker将Command传递给 Receiver只需要调用 Command的execute()
  5. Receiver是真正处理任务的对象,和Invoker解耦

命令的撤销

  1. Command增加 undo() 接口
  2. 通过存放上一个被执行的命令,调用上一个命令的撤销方法实现撤销
  3. 每个具体的命令通过存放状态或者执行相反的操作来实现撤销

多个命令一键调用

  1. 定义一个新的命令子类,存放多个命令的引用
  2. 通过对这个命令子类实例的调用,实现对多个命令的调用

Tips

  1. 在初始化对象数组或集合时,为了避免遍历时空指针,可以空对象的方式,填充到数据或集合中
  2. 空对象类具有非空对象的形,但是执行方法时没有实际的效果

命令模式的定义

将请求封装成对象,这可以让你使用不同的请求、队列、或者日志请求来参数化其他对象。命令模式也支持撤销操作