命令
命令(command)指的是一个执行某些特定事情的指令 请求发送者和请求接收者能够消除彼此之间的耦合关系
请求封装成command对象,可以在程序中被四处传递
command对象拥有更长的生命周期
支持撤销、排队等操作
实质就是 封装中间处理层,
约定好,并执行
命令模式的由来,其实是回调(callback)函数的一个面向对象的替代品
撤销和重做
- canvas
- 因为在Canvas画图中,擦除一条线相对不容易实现
- 先清除画布,然后把刚才执行过的命令全部重新执行一遍,这一点同样可以利用一个历史列表堆栈办到
- 游戏录像
- 把用户在键盘的输入都封装成命令,执行过的命令将被存放到堆栈中
排队
- 命令执行排队进行,一个完成,再做第二个
- 压进一个队列堆栈,当动画执行完,通知队列
- 可以选择发布-订阅模式
宏命令
- 宏命令是命令模式与组合模式的联用产物
智能式
傻瓜式 - 保存一个接收者来负责真正执行客户的请求,这种情况下命令对象是"傻瓜式"的
智能式 - "聪明"的命令对象可以直接实现请求,这样一来就不再需要接收者的存在 - 保存一个接收者来负责真正执行客户的请求,这种情况下命令对象是"傻瓜式"的
智能式与策略模式对比 - 策略模式指向的问题域更小,所有策略对象的目标总是一致的,它们只是达到这个目标的不同手段,它们的内部实现是针对"算法"而言的。 - 而智能命令模式指向的问题域更广,command对象解决的目标更具发散性。命令模式还可以完成撤销、排队等功能