定义:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。对请求排队或记录请求日志,以及支持可撤消的操作。
主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。
何时使用:在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。
如何解决:通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。

从命令模式的结构图可以看出,它涉及到五个角色,它们分别是:
客户角色:发出一个具体的命令并确定其接受者。
命令角色:声明了一个给所有具体命令类实现的抽象接口
具体命令角色:定义了一个接受者和行为的弱耦合,负责调用接受者的相应方法。
请求者角色:负责调用命令对象执行命令。
接受者角色:负责具体行为的执行。
认为是命令的地方都可以使用命令模式,比如: 1、GUI 中每一个按钮都是一条命令。 2、模拟 CMD。
优点: 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。
缺点:使用命令模式可能会导致某些系统有过多的具体命令类。
参考
http://wangqingpei557.blog.51cto.com/1009349/626464/
http://www.runoob.com/design-pattern/command-pattern.html