设计模式---命令模式
来源:互联网 发布:adobe flash mac 编辑:程序博客网 时间:2024/05/27 08:13
命令模式
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
只有在真正需要如撤销,恢复操作等功能时,把原来的代码重构为命令模式才有意义。
#include<iostream>
#include<list>
using namespace std;
class Barbecuer
{
public:
void BakeMutton()
{
cout<<" bake goat meat\n";
}
void BakeChicken()
{
cout<<" bake chicken meat\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)
{
}
void ExcuteCommand()
{
receiver->BakeMutton();
}
};
class BakeChickenCommand:public Command
{
public:
BakeChickenCommand(Barbecuer *receiver):Command(receiver)
{
}
void ExcuteCommand()
{
receiver->BakeChicken();
}
};
class Waiter
{
private:
list<Command*> orders ;
public:
Waiter(){ }
void SetOrder(Command *cmd)
{
orders.push_back(cmd);
cout<<"increase orders...\n";
}
void CanOrder(Command *cmd)
{
orders.remove(cmd);
cout<<"cancel orders...\n";
}
void Notify()
{
list<Command*>::iterator it;
for(it = orders.begin();it!= orders.end();it++)
{
(*it)->ExcuteCommand();
}
}
};
int main()
{
Barbecuer *bb = new Barbecuer();
Command *bacmd1 = new BakeMuttonCommand(bb);
Command *bacmd3 = new BakeMuttonCommand(bb);
Command *bacmd2 = new BakeChickenCommand(bb);
Waiter *girl = new Waiter();
girl->SetOrder(bacmd1);
girl->SetOrder(bacmd2);
girl->SetOrder(bacmd3);
girl->Notify();
girl->CanOrder(bacmd1);
girl->Notify();
return 0;
}
#include<iostream>
#include<list>
using namespace std;
class Barbecuer
{
public:
void BakeMutton()
{
cout<<" bake goat meat\n";
}
void BakeChicken()
{
cout<<" bake chicken meat\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)
{
}
void ExcuteCommand()
{
receiver->BakeMutton();
}
};
class BakeChickenCommand:public Command
{
public:
BakeChickenCommand(Barbecuer *receiver):Command(receiver)
{
}
void ExcuteCommand()
{
receiver->BakeChicken();
}
};
class Waiter
{
private:
list<Command*> orders ;
public:
Waiter(){ }
void SetOrder(Command *cmd)
{
orders.push_back(cmd);
cout<<"increase orders...\n";
}
void CanOrder(Command *cmd)
{
orders.remove(cmd);
cout<<"cancel orders...\n";
}
void Notify()
{
list<Command*>::iterator it;
for(it = orders.begin();it!= orders.end();it++)
{
(*it)->ExcuteCommand();
}
}
};
int main()
{
Barbecuer *bb = new Barbecuer();
Command *bacmd1 = new BakeMuttonCommand(bb);
Command *bacmd3 = new BakeMuttonCommand(bb);
Command *bacmd2 = new BakeChickenCommand(bb);
Waiter *girl = new Waiter();
girl->SetOrder(bacmd1);
girl->SetOrder(bacmd2);
girl->SetOrder(bacmd3);
girl->Notify();
girl->CanOrder(bacmd1);
girl->Notify();
return 0;
}
阅读全文
0 0
- 设计模式---命令模式
- 设计模式-命令模式
- 设计模式:命令模式
- 设计模式:命令模式
- 设计模式:命令模式
- 设计模式 命令模式
- 设计模式--命令模式
- 设计模式---命令模式
- 设计模式- 命令模式
- 设计模式---命令模式
- 设计模式 - 命令模式
- 【设计模式】【命令模式】
- 设计模式---命令模式
- 设计模式 - 命令模式
- 设计模式:命令模式
- 设计模式 - 命令模式
- 设计模式-命令模式
- 设计模式---命令模式
- linux小技巧:快速合并压缩文件
- PaaS平台的尴尬与变革
- 果蝇算法--背包问题
- adb控制MTKLogger
- linux win 共享文件
- 设计模式---命令模式
- ELK 日志分析系统(转)
- 微信公众号js支付开发注意点
- antd Form 相关
- 编程之美2.11 寻找最近点对
- 树2. List Leaves(树的遍历,队列的简单应用)
- RxCocoa
- python第九篇之-函数帮助信息(doc)
- Qt错误 error: C2228: “.exec”的左边必须有类/结构/联合 的解决方法