现在的位置: 首页 > 综合 > 正文

C++设计模式—命令模式

2018年03月21日 ⁄ 综合 ⁄ 共 1120字 ⁄ 字号 评论关闭

命令模式(Command):将一个请求封装为一个对象,从而使你可以不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

 

命令模式结构图:

 

 

 

Command类,用来声明执行操作的接口。

 

class Command

{

 protected:

    Receiver  *receiver;

 public:

    Command(Receiver * receiver)

    {

          this->receiver = receiver;

     }

     virtual  void Execute()=0;

};

 

 

ConcreteCommand类,将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现Execute。

 

class ConcreteCommand :public  Command

{

 public:

ConcreteCommand(Receiver  * receiver):Command(recciver){}

void  Execute()

{

    receiver->Action();

}

};

 

 

Invoker类,要求该命令执行这个请求。

 

class Invoker

{

 private:

Command  * command;

 public:

void  SetCommand(Command * command)

{

     this->command= command;

}

void  ExecuteCommand()

{

     command->Execute();

}

};

 

 

Receiver类,知道如何实施与执行一个与请求相关的操作,任何类都可能做为一个接收者。

 

class Receiver

{

 public:

    void  Action()

    {

          cout<< “执行请求!”<<endl;

    }

};

 

 

客户端代码,创建一个具体命令对象并设定它的接收者。

 

 

void main()

{

     Receiver  *r = new Receiver();

     Command *c = new ConcreteCommand(r);

     Invoker  *I = new Invoker();

     

      i->SetCommand(c);

     i->ExecuteCommand();

 

}

 

 

命令模式作用:

1.      他能较容易地设计一个命令队列;

2.      在需要的情况下,可以较容易地将命令记入日志;

3.      允许接收请求的一方决定是否要否决请求

4.      可以容易地实现对请求的撤销和重做;

5.      由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容量。

抱歉!评论已关闭.