餐厅下单流程

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

- Command 有 execute()接口
- 客户创建一个命令对象,通过setCommand()传递给Inoker
- Invoker不需要知道Command是什么,不需要知道具体的 Receiver是什么
- Invoker将Command传递给 Receiver只需要调用 Command的execute()
- Receiver是真正处理任务的对象,和Invoker解耦
命令的撤销
- Command增加 undo() 接口
- 通过存放上一个被执行的命令,调用上一个命令的撤销方法实现撤销
- 每个具体的命令通过存放状态或者执行相反的操作来实现撤销
多个命令一键调用
- 定义一个新的命令子类,存放多个命令的引用
- 通过对这个命令子类实例的调用,实现对多个命令的调用
Tips
- 在初始化对象数组或集合时,为了避免遍历时空指针,可以空对象的方式,填充到数据或集合中
- 空对象类具有非空对象的形,但是执行方法时没有实际的效果
命令模式的定义
将请求封装成对象,这可以让你使用不同的请求、队列、或者日志请求来参数化其他对象。命令模式也支持撤销操作