设计模式之命令行模式(Command)

来源:互联网 发布:淘宝店铺出租合同 编辑:程序博客网 时间:2024/06/05 05:56

优点:
1、容易设计出一个命令队列
2、可以设计出请求的撤销与重做
作用:
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作

#include <iostream>using namespace std;#include <vector>//用来声明执行操作的接口class Command{public:    virtual void execute1() = 0;    virtual void execute2() = 0;    virtual ~Command() = 0{}protected:    Command(){}};//知道如何实施与执行一个与请求相关的操作,任何类都可能作为一个接收者class Receiver{public:    Receiver(){}    ~Receiver(){}    void action1()    {        cout << "Receiver::action1" << endl;    }    void action2()    {        cout << "Receiver::action2" << endl;    }};//将一个接收者对象绑定于一个操作,调用接收者相应的操作,以实现executeclass ConcreteCommand : public Command{public:    ConcreteCommand(Receiver *receiver)    {        _receiver = receiver;    }    ~ConcreteCommand(){}    virtual void execute1()    {        _receiver->action1();    }    virtual void execute2()    {        _receiver->action2();    }private:    Receiver *_receiver;};//要求该命令执行这个请求class Invoker{public:    Invoker(Command *command)    {        _cmd = command;    }    ~Invoker(){}    void Invoke1()    {        _cmd->execute1();    }    void Invoke2()    {        _cmd->execute2();    }private:    Command *_cmd;};int main(){    //具体执行(处理)    Receiver *receiver = new Receiver;    //具体命令(请求)    Command *cmd = new ConcreteCommand(receiver);    //调用命令(激活请求)    Invoker *inv = new Invoker(cmd);    //调用命令1(激活请求1)    inv->Invoke1();    //调用命令2(激活请求2)    inv->Invoke2();    system("Pause");    return 0;}

这里写图片描述