命令模式----C++实现

来源:互联网 发布:直通车显示淘宝下架 编辑:程序博客网 时间:2024/06/07 02:21

命令模式

定义:

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

适用性:

当有如下需求时,可以用命令模式:

1、  想抽象出待执行的动作以参数化某对象。命令模式是回调机制的一个面向对象的替代品。

2、  在不同的时刻指定,排列和执行请求。

3、  支持取消操作。

4、  支持修改日志。

5、  用构建在原语操作上的高层操作构造一个系统。

 

结构:

实现:

//命令接收者

class Receiver

{

public:

   voiddoSomething()

   {

     cout<<"Receiver  doSomething"<<endl;

   }

};

//抽象的命令类

class Command

{

public:

   virtual void Execute() {}

virtual ~Command(){}

 

};

//具体命令类

class ConcreteCommand1:public Command

{

public:

       ConcreteCommand1(Receiver*pReceiver):m_pReceiver(pReceiver)

       {   }

   voidExecute()

   {

         cout<<"ConcreteCommand1  Execute"<<endl;

         m_pReceiver->doSomething();

   }

private:

       Receiver *m_pReceiver;

};

 

class ConcreteCommand2:public Command

{

public:

       ConcreteCommand2(Receiver*pReceiver):m_pReceiver(pReceiver)

       {   }

       voidExecute()

       {

               cout<<"ConcreteCommand2  Execute"<<endl;

              m_pReceiver->doSomething();

       }

private:

       Receiver *m_pReceiver;

};

//调用者

class Invoker

{

public:

   voidSetCommand(Command *pCommand)

   {

         m_pCommand = pCommand;

   }

 

   voidAction()

   {

         m_pCommand->Execute();

   }

private:

       Command  *m_pCommand;

};

 

 

       Invoker *pInvoker = new Invoker;

       Receiver *pR = new Receiver;

       Command *pCommand1 = new ConcreteCommand1(pR);

       Command *pCommand2 = new ConcreteCommand2(pR);

       pInvoker->SetCommand(pCommand1);

       pInvoker->Action();

       pInvoker->SetCommand(pCommand2);

       pInvoker->Action();

 

 

 

 

 

0 0