设计模式C++版:第十四式命令模式

来源:互联网 发布:网络诈骗案案例 编辑:程序博客网 时间:2024/05/17 03:28

命令模式:将一个请求封装为一个对象,从而使你可用不同请求。对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。优点就是把一个请求操作的对象,和一个知道怎么一个操作的对象分隔开,不再是紧耦合。敏捷开发原则,不要为代码添加基于猜测的,实际不需要的功能。这也是编程中很重要的一个原则——KISS原则。

#pragma  once#include <stdio.h>#include <list>using std::list;//最终处理命令者class Barbecuer{public:void bakemutton(){printf("烤肉串\n");}void bakechickenwing(){printf("烤鸡翅\n");}};//命令类系class Command{public:Command(Barbecuer& cur){this->m_cur = cur;}virtual void excutecommand(){ }protected:Barbecuer m_cur;};class BakeChickenWingCommand :public Command{public:BakeChickenWingCommand(Barbecuer &cur) :Command(cur){}virtual void excutecommand(){m_cur.bakechickenwing();}};class BakeMuttonCommand :public Command{public:BakeMuttonCommand(Barbecuer &cur) :Command(cur){}virtual void excutecommand(){m_cur.bakemutton();}};//管理命令类class Waiter{public:void addcommand(Command * com){m_comlist.push_back(com);}void cancelcommand(Command* com){m_comlist.remove(com);   //每个命令都不同,使用remove胜过erase.}//通知执行void notify(){for each  (Command * var in m_comlist){var->excutecommand();}}private:list<Command*> m_comlist;};int main(){Barbecuer boy;Command * com1 = new BakeMuttonCommand(boy);Command * com2 = new BakeMuttonCommand(boy);Command * com3 = new BakeMuttonCommand(boy);Command *com4 = new BakeChickenWingCommand(boy);Waiter girl;girl.addcommand(com1);girl.addcommand(com2);girl.addcommand(com3);girl.addcommand(com4);girl.notify();printf("烤串太多,取消一个\n");girl.cancelcommand(com3);girl.notify();return 0;}


原创粉丝点击