Renbobo's Blog

Wo go where our vision is.

View project on GitHub

命令模式

27 Aug 2017

定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

优点:

  1. 封装性好 无需知道每个命令的具体实现,只要需要时调用即可

  2. 易扩展 在命令模式中,在接收者类中一般会对操作进行最基本的封装,命令类则通过对这些基本的操作进行二次封装,当增加新命令的时候,对命令类的编写一般不是从零开始的,有大量的接收者类可供调用,也有大量的命令类可供调用,代码的复用性很好。比如,文件的操作中,我们需要增加一个剪切文件的命令,则只需要把复制文件和删除文件这两个命令组合一下就行了,非常方便。

缺点: 需要给每个命令单独封装一个类。即使一个简单的几行代码的小功能,也要单独封装。

命令模式的更多用途:队列请求

命令可以将运算打包(一个接收者和一组动作),然后将它传来传去,就像是一般的对象一样。现在即使命令对象被创建许久后,运算依然可以被调用。事实上,它甚至可以在不同的线程中被调用。我们可以利用这样的特性衍生一些应用,例如:日程安排线程池工作队列等。 想想一下有一个工程队列:你在某一段添加命令,然后另一端则是线程。线程进行下面的动作:队列中取出一个命令,调用他的execute方法,等待调用完成,然后将此命令对象丢弃,再取下一个命令..

命令模式的更多用途:日志请求

需要我们将所有的动作都记录在日志中,并能在系统死机后,重新调用这些动作恢复到之前的状态。通过新增两个方法(store(),load()) 当我们执行命令时,将历史记录在磁盘中。一旦系统死机,就可以将命令对象重新加载,并呈批的一次调用这些对象的execute方法。