把方法调用封装起来,通过封装方法调用,可以把运算块包装成形。调用此运算的对象不需要关心事情是如何进行的,只要知道如何使用包装成形的方法来完成它就可以了。
命令模式将动作的请求者与动作的执行者对象中解耦。将“请求”封装成对象,以便使用不同的请求队列或者日志来参数化其他对象。命令模式也可以支持撤销的 操作。
一个命令对象通过在特定接收者上绑定一组动作来封装一个请求。这个对象只暴露出一个execute()方法(有时候会有undo()方法),当此方法被调用的时候,接收者就会进行这些动作。
命令模式的更多用途:
1)队列请求
命令可以将运算块打包,然后将它传来传去,就像是一般的对象。即使在命令对象被创建许久之后,运算依然可以被调用。甚至可以在不同的线程中被调用。
2)日志请求
某些应用需要我们将所有动作记录在日志中,并能在系统死机之后重新调用这些动作恢复到之前的状态。
class ICommand{
public:
virtual ~ICommand(){}
virtual void execute();
}
class ObjectOnCommand : public ICommand{
public:
void execute(){
//do someting;
}
}