命令模式(Command)

意图

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。

动机

有时必须向某对象提交请求,但并不知道关于被请求的操作或请求的接受者的任何信息。

命令模式通过将请求本身变成一个对象来使工具箱对象可向未指定的应用对象提出请求。这个对象可被存储并像其他的对象一样被传递。

这一模式的关键是一个抽象的Command类,它定义了一个执行操作的接口。

其最简单的形式是一个抽象的Execute操作。

具体的Command子类将接收者作为其一个实例变量,并实现Execute操作,指定接收者采取的动作。而接收者有执行该请求所需的具体信息。

适用性

当你有如下需求时,可使用Command模式:

参与者

优点

示例一:通用源代码

司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。

这个过程好在,三者(司令、命令、士兵)相互解耦,任何一方都不用去依赖其他人的具体实现,只需要做好自己的事儿就行,司令员要的是结果,不会去关注到底士兵是怎么实现的。

1565940294322

示例二:多个请求命令

1565944140348