设计模式 command模式 (c++)

来源:互联网 发布:看门狗低配置优化补丁 编辑:程序博客网 时间:2024/05/16 10:02
Command模式将所有的请求封装到一个对象Command中,并且将请求的接受者存放到具体的CONCRETE类中;Invoker储存相应的动作对象,并且通过触发对象的excute向Receiver提交一个请求;
Command-一个声明执行操作的接口;
ConcreteCommand-对象对应一个动作;
Invoker-要求对象完成该动作;
Receiver-任何类都可以作为一个接受者;

C++设计模式19:Command模式
 
 
class Receiver
{
public:
 Receiver(){}
 ~Receiver(){}
 void Action()//ACTION1,2,3,4;
  {cout<<"This is Receiver";}//Receiver真正的动作
};
 
 
class Command
{
public:
 virtual ~Command(){};
 virtual void Excute()=0{};
protected:
 Command(){};
};
 
 
class ConcreteCommandA:public Command
{
public:
 ConcreteCommandA(Receiver* rev){m_rev=rev;};
 ~ConcreteCommandA(){};
 void Excute()
 {
  cout<<"A EXE";
  m_rev->Action(); //在此实现动作ACTION;
 }
private:
 Receiver* m_rev;
};
 
 
class ConcreteCommandB:public Command
{
public:
 ConcreteCommandB(Receiver* rev){m_rev=rev;};
 ~ConcreteCommandB(){};
 void Excute(){cout<<"B EXE";};
private:
 Receiver* m_rev;
};
 
 
class Invoker
{
public:
 Invoker(Command* cmd){m_cmd=cmd;};
 ~Invoker(){};
 void Invoke(){m_cmd->Excute();};
private:
 Command* m_cmd;
};
 
 
void main()
{
 Receiver* rev=new Receiver();
 Command* cmd=new ConcreteCommandA(rev);
 Invoker* inv=new Invoker(cmd);
 inv->Invoke(); //唤醒动作EXCUTE;
}
0 0