Skip to content

命令

命令(command)指的是一个执行某些特定事情的指令 请求发送者和请求接收者能够消除彼此之间的耦合关系

  • 请求封装成command对象,可以在程序中被四处传递

  • command对象拥有更长的生命周期

  • 支持撤销、排队等操作

  • 实质就是 封装中间处理层,

  • 约定好,并执行

命令模式的由来,其实是回调(callback)函数的一个面向对象的替代品

撤销和重做

  • canvas
    • 因为在Canvas画图中,擦除一条线相对不容易实现
    • 先清除画布,然后把刚才执行过的命令全部重新执行一遍,这一点同样可以利用一个历史列表堆栈办到
  • 游戏录像
    • 把用户在键盘的输入都封装成命令,执行过的命令将被存放到堆栈中

排队

  • 命令执行排队进行,一个完成,再做第二个
  • 压进一个队列堆栈,当动画执行完,通知队列
    • 可以选择发布-订阅模式

宏命令

  • 宏命令是命令模式与组合模式的联用产物

智能式

傻瓜式 - 保存一个接收者来负责真正执行客户的请求,这种情况下命令对象是"傻瓜式"的

智能式 - "聪明"的命令对象可以直接实现请求,这样一来就不再需要接收者的存在 - 保存一个接收者来负责真正执行客户的请求,这种情况下命令对象是"傻瓜式"的

智能式与策略模式对比 - 策略模式指向的问题域更小,所有策略对象的目标总是一致的,它们只是达到这个目标的不同手段,它们的内部实现是针对"算法"而言的。 - 而智能命令模式指向的问题域更广,command对象解决的目标更具发散性。命令模式还可以完成撤销、排队等功能