用代码和UML图化解设计模式之《命令模式》
一、建立命令队列;二、可以将命令记入日志;三、接收请求的一方可以拒绝;四、添加一个新命令类不影响其它类;
命令模式把请求一个操作的对象与知道怎么操行一个操作的对象分开
命令模式感觉就是一个领导接受客户端的命令,让底下的人去做,但是比较特殊。继承命令
上图

上代码
// Command.cpp : 定义控制台应用程序的入口点。////************************************************************************/ /* @filename Command.cpp@author wallwind @createtime 2012/10/24 00:00@function 命令模式@email wochenglin@qq.com */ /************************************************************************/ #include "stdafx.h"#include <iostream>#include <string>#include <vector>using namespace std;//烤肉师傅class Barbucer{public:void MakeMutton(){cout<<"烤羊肉"<<endl;}void MakeChickenWing(){cout<<"烤鸡翅膀"<<endl;}};//抽象命令类class Command{protected:Barbucer* receiver;public:Command(Barbucer* temp){receiver = temp;}virtual void ExecuteCmd()=0;};//烤羊肉命令class BakeMuttonCmd : public Command{public:BakeMuttonCmd(Barbucer* temp) : Command(temp){}virtual void ExecuteCmd(){receiver->MakeMutton();}};//烤鸡翅class ChickenWingCmd : public Command{public:ChickenWingCmd(Barbucer* temp) : Command(temp){}virtual void ExecuteCmd(){receiver->MakeChickenWing();}};//服务员类class Waiter{protected:vector<Command*> m_commandList;public:void SetCmd(Command* temp){m_commandList.push_back(temp);cout<<"增加定单"<<endl;}//通知执行void Notify(){vector<Command*>::iterator p=m_commandList.begin();while(p!=m_commandList.end()){(*p)->ExecuteCmd();p++;}}};int _tmain(int argc, _TCHAR* argv[]){//店里添加烤肉师傅、菜单、服务员等顾客Barbucer* barbucer=new Barbucer();Command* cmd= new BakeMuttonCmd(barbucer);Command* cmd2=new ChickenWingCmd(barbucer);Waiter* girl = new Waiter();//点菜girl->SetCmd(cmd);girl->SetCmd(cmd2);//服务员通知girl->Notify();return 0;return 0;}
代码非原创。但是觉得挺好,,,,很容易。
ok 今天就到这里。。。。继续学习
更多文章,欢迎访问: