美文网首页
【设计模式】命令模式

【设计模式】命令模式

作者: CloudHunter | 来源:发表于2016-12-31 23:45 被阅读0次

设计模式:命令模式

定义:“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持可撤销的操作。
命令模式通过在特定的接收者上绑定一组动作来封装一个请求,这个对象只会暴露一个execute方法,当次方法被调用的时候,接收者就会进行这些动作。
命令模式的设计支持请求调用者和请求接收者之间的解耦。

命令模式的更多用途:队列请求
命令模式可以将运算块打包(一个接收者和一组动作),然后将它传来传去,就像是一般的对象一样。
想象有一个工作队列:你在某一端添加命令,然后另一端则是线程。线程进行下面的动作:从队列中取出一个命令,然后调用execute()方法,等待这个调用完成,然后将此命令对象丢掉,再取出下一个命令。。。。

命令模式的更多用途:日志请求
某些应用需要我们将所有的动作的记录在日志中,并能在系统死机之后,重新调用这些动作回复到之前的状态。通过新增两个方法(store()和load()),命令能够实现这一点,在Java中我们可以利用对象序列化实现这些方法,但是一般认为序列化最好还是只用在对象的持久化上。
对更高级的应用而言,这些技巧可以扩展到应用事物处理中,也就是说一整群操作必须全部进行完成,或者没有进行任何操作。


要点

  • 命令模式将发出请求的对象和执行请求的对象解耦
  • 在被解耦的两者之间是通过命令对象进行沟通的,命令对象封装了接收者和一个或一组动作
  • 调用者通过调用命令对象的execute()发出请求,这回使得接受者的动作被调用
    *调用者可以接受命令当做参数,甚至可以在运行时动态的进行
  • 命令模式可以支持撤销,做法是实现一个undo()方法来 回调到execute()被执行前的状态
  • 宏命令是命令的一种简单的延伸,允许调用多个命令。宏方法也可以支持撤销
  • 实际操作时,很常见使用“聪明”命令对象,也就是直接实现了请求,而不是将工作委托给接收者
  • 命令也可以用来实现日志和事物系统

相关文章

网友评论

      本文标题:【设计模式】命令模式

      本文链接:https://www.haomeiwen.com/subject/xyybvttx.html