设为首页 加入收藏

TOP

设计模式之命令模式(Command)
2014-11-23 17:59:15 来源: 作者: 【 】 浏览:7
Tags:设计模式 命令 模式 Command

命令模式(Command)把请求封装成一个对象,使请求能够存储更多的信息拥有更多的能力。命令模式同样能够把请求的发送者和接收者解耦,但它不关心请求将以何种方式被处理。命令模式经常与职责链模式(Chain of Responsibility)和组合模式(Composite)一起使用:职责链模式处理命令模式封装的对象,组合模式可以把简单的命令对象组合成复杂的命令对象。

本文举了一个在饭店点菜的例子。(1)烤肉师傅负责在后台(厨房)做饭。(2)Command负责提供提供各种命令,相当于菜单。(3)服务员与客服打交道,负责记录客户点了哪些菜(把客户的命令记下来),然后交给厨师去做。(4)客户就负责点菜。

代码:

#include    
#include    
#include    
using namespace std;  
  
  
class Command;  
class MakeChikenCmd;  
class MakeMuttonCmd;  
//烤肉师傅   
class RoastCook{   
    friend class MakeChikenCmd;  
    friend class MakeMuttonCmd;  
private:  
    void MakeMutton()   
    { cout << "烤羊肉"; }  
    void MakeChickenWing()   
    { cout << "烤鸡翅膀"; }  
};  
  
//命令的接口,抽象类   
class Command{  
public:  
    Command(RoastCook* cook)  
    {  
        cooker = cook;  
    }  
    virtual ~Command(){}  
    virtual void Execute()=0;  
protected:  
    RoastCook *cooker;//包含了烤肉师傅的对象   
};  
  
//烤羊肉命令   
class MakeMuttonCmd : public Command{  
public:  
    MakeMuttonCmd(RoastCook *cook):Command(cook){}  
    void Execute()  
    {  
        cooker->MakeMutton();  
    }  
};  
//烤鸡肉命令   
class MakeChikenCmd : public Command{  
public:  
    MakeChikenCmd(RoastCook *cook):Command(cook){}  
    void Execute()  
    {  
        cooker->MakeChickenWing();  
    }  
};  
  
//服务员类,负责与客服交互   
class Waiter{  
public:  
    Waiter(string _name)  
    {this->name = _name;}  
    void AddOder(Command* subOder)//加入客户点的菜   
    {  
        oder.push_back(subOder);  
    }  
  
    void Notify()  
    {  
        vector::iterator iter;  
        cout<Execute();  
            cout< oder;//点菜单   
    string name;//服务员名字   
};  
  
class Custmer{  
public:  
    Custmer(string myname)  
    {  
        this->name = myname;  
        this->w = NULL;  
    }  
  
    void CustmerOder(Command *cmd)  
    {  
        cout<<"顾客"<AddOder(cmd);  
    }  
  
    void CallWaiter(Waiter *_w)  
    {  
        cout<<"顾客"<w = _w;  
        cout<<"服务员"<getName()<<"为您服务"<
#include 
#include 
using namespace std;


class Command;
class MakeChikenCmd;
class MakeMuttonCmd;
//烤肉师傅
class RoastCook{ 
	friend class MakeChikenCmd;
	friend class MakeMuttonCmd;
private:
	void MakeMutton() 
	{ cout << "烤羊肉"; }
	void MakeChickenWing() 
	{ cout << "烤鸡翅膀"; }
};

//命令的接口,抽象类
class Command{
public:
	Command(RoastCook* cook)
	{
		cooker = cook;
	}
    virtual ~Command(){}
	virtual void Execute()=0;
protected:
	RoastCook *cooker;//包含了烤肉师傅的对象
};

//烤羊肉命令
class MakeMuttonCmd : public Command{
public:
	MakeMuttonCmd(RoastCook *cook):Command(cook){}
	void Execute()
	{
		cooker->MakeMutton();
	}
};
//烤鸡肉命令
class MakeChikenCmd : public Command{
public:
	MakeChikenCmd(RoastCook *cook):Command(cook){}
	void Execute()
	{
		cooker->MakeChickenWing();
	}
};

//服务员类,负责与客服交互
class Waiter{
public:
	Waiter(string _name)
	{this->name = _name;}
	void AddOder(Command* subOder)//加入客户点的菜
	{
		oder.push_back(subOder);
	}

	void Notify()
	{
		vector::iterator iter;
		cout<Execute();
			cout< oder;//点菜单
	string name;//服务员名字
};

class Custmer{
public:
	Custmer(string myname)
	{
		this->name = myname;
		this->w = NULL;
	}

	void CustmerOder(Command *cmd)
	{
		cout<<"顾客"<AddOder(cmd);
	}

	void CallWaiter(Waiter *_w)
	{
	    cout<<"顾客"<w = _w;
		cout<<"服务员"<getName()<<"为您服务"< 
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇string和char*的区别以及const_ca.. 下一篇(step 3.3)hdu 1203(I NEED A OFF..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python 教程 - W3Sch (2025-12-26 12:00:51)
·Python基础教程,Pyt (2025-12-26 12:00:48)
·神仙级python入门教 (2025-12-26 12:00:46)
·“我用Java 8”已成 (2025-12-26 11:19:54)
·下载 IntelliJ IDEA (2025-12-26 11:19:52)