命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
例子就用大话设计模式里的
#include<stdio.h>
#include<list>
using namespace std;
class Butcher
{
public:
void roastMutton()
{
printf("烤羊肉\n");
}
void roastChickenWing()
{
printf("烤鸡翅\n");
}
};
class Command
{
public:
Butcher butcher;
Command(Butcher &b)
{
butcher = b;
}
virtual void executeCmd()=0;
};
class MuttonCmd:public Command
{
public:
MuttonCmd(Butcher &b):Command(b)
{
}
void executeCmd()
{
butcher.roastMutton();
}
};
class ChickenWingCmd:public Command
{
public:
ChickenWingCmd(Butcher &b):Command(b)
{
}
void executeCmd()
{
butcher.roastChickenWing();
}
};
class Waiter
{
public:
list<Command*> l;
void addCmd(Command*cmd)
{
l.push_back(cmd);
}
void notify()
{
list<Command*>::iterator it = l.begin();
while(it != l.end())
{
(*it)->executeCmd();
it++;
}
}
};
int main()
{
Butcher b;
MuttonCmd cmd1(b);
ChickenWingCmd cmd2(b);
Waiter w;
w.addCmd(&cmd1);
w.addCmd(&cmd2);
w.addCmd(&cmd1);
w.addCmd(&cmd2);
w.notify();
return 0;
}