命令模式

来源:互联网 发布:发票统计软件 编辑:程序博客网 时间:2024/05/26 15:58
#include <iostream>
#include <string>
//#include <afx.h>
#include <vector>
#include <list>
using namespace std;


class Barbecuer
{
public:
void BakeButton()
{
cout<<"烤羊肉串\n";
}


void BakeChickenWing()
{
cout<<"烤鸡翅\n";
}
};


class Command
{
protected:
Barbecuer *receiver;
public:
Command(Barbecuer *receiver)
{
this->receiver = receiver;
}
virtual void ExcuteCommand(){};
};


class BakeMuttonCommand:public Command
{
public:
BakeMuttonCommand(Barbecuer *receiver):Command(receiver){};


virtual void ExcuteCommand()
{
receiver->BakeButton();
}
};


class BakeChickenWingCommand:public Command
{
public:
BakeChickenWingCommand(Barbecuer *receiver):Command(receiver){};


virtual void ExcuteCommand()
{
receiver->BakeChickenWing();
}
};


class Waiter
{
list<Command *>CI;
list<Command *>::iterator i;
public:
void SetOrder(Command *command)
{
CI.push_back(command);
}


void Notify()
{
for (i = CI.begin(); i != CI.end(); ++i) 
(*i)->ExcuteCommand();
}
};


int main()
{
Barbecuer man;
BakeMuttonCommand muttoncommand1(&man);
BakeMuttonCommand muttoncommand2(&man);
BakeChickenWingCommand chickenwingcommand1(&man);


Waiter girl;
girl.SetOrder(&muttoncommand1);
girl.SetOrder(&muttoncommand2);
girl.SetOrder(&chickenwingcommand1);


girl.Notify();


cout<<"\nOK\n";
return 1;
}