日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

13.命令模式

發布時間:2024/9/27 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 13.命令模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1命令模式的核心內容是:

A:發命令者,與實際不同的是,發命令者要求了實際由誰做菜,烤肉。

B:有兩個級別的服務員,一個級別的服務員每次只收集一個命令;另外一類服務員可以同時收集多條命令,最后通知廚子和Barbecuer

2命令模式的作用:通過命令模式可以模擬到餐館下單,服務員向廚子發命令的這個場景。

3命令模式具體描述

命令模式:命令模式把一個請求或者操作封裝到一個對象中。

命令模式把發出命令的責任和執行命令的責任分割開,委派給不同的對象。

命令模式允許請求的一方和發送的一方獨立開來,

使得請求的一方不必知道接收請求的一方的接口,

更不必知道請求是怎么被接收,

以及操作是否執行,何時被執行以及是怎么被執行的。

系統支持命令的撤消。

?

俺有一個MM家里管得特別嚴,沒法見面,只好借助于她弟弟在我們倆之間傳送信息,

她對我有什么指示,就寫一張紙條讓她弟弟帶給我。這不,

她弟弟又傳送過來一個COMMAND,為了感謝他,我請他吃了碗雜醬面,

哪知道他說:“我同時給我姐姐三個男朋友送COMMAND,就數你最小氣,

才請我吃面。”

4.命令模式類圖

5.代碼:

#include<iostream>

#include <string>

#include <list>

?

using namespace std;

//命令模式:命令模式把一個請求或者操作封裝到一個對象中。

//命令模式把發出命令的責任和執行命令的責任分割開,委派給不同的對象。

//命令模式允許請求的一方和發送的一方獨立開來,

//使得請求的一方不必知道接收請求的一方的接口,

//更不必知道請求是怎么被接收,

//以及操作是否執行,何時被執行以及是怎么被執行的。

//系統支持命令的撤消。

//

//俺有一個MM家里管得特別嚴,沒法見面,只好借助于她弟弟在我們倆之間傳送信息,

//她對我有什么指示,就寫一張紙條讓她弟弟帶給我。這不,

//她弟弟又傳送過來一個COMMAND,為了感謝他,我請他吃了碗雜醬面,

//哪知道他說:“我同時給我姐姐三個男朋友送COMMAND,就數你最小氣,

//才請我吃面。”

?

//接收者執行命令,這里相當于實際干活的人

class Barbecuer?

{

public:

??? void bakeMutton()

??? {

??????? cout << "烤羊肉串" << endl;

??? }

??? void bakeChickenWing()

??? {

??????? cout << "烤雞翅" << endl;

??? }

};

?

//對某個人下達的命令

class Command?? //命令基類

{

protected:

??? Barbecuer *receiver;//類的包含

public:

??? Command(Barbecuer *receiver)//命令接受

??? {

??????? this->receiver = receiver;

??? }

??? //然后執行命令

??? virtual void executeCommand() = 0;

};

?

//相當于命令的特化

class BakeMuttonCommand :public Command

{

public:

??? BakeMuttonCommand(Barbecuer *receiver) :Command(receiver)

??? {}

??? void executeCommand()

??? {

??????? receiver->bakeMutton();

??? }

};

?

//命令的特化

class BakeChikenWingCommand :public Command

{

public:

??? BakeChikenWingCommand(Barbecuer *receiver) :Command(receiver)

??? {}

??? void executeCommand()

??? {

??????? receiver->bakeChickenWing();

??? }

};

?

//服務員,這里是當條命令

class Waiter

{

private:

??? Command *command;

public:

??? void setOrder(Command *command)

??? {

??????? this->command = command;

??? }

??? void notify()

??? {

??????? command->executeCommand();

??? }

};

?

//gei多個對象下達命令,下多條命令的情況

class Waiter2?

{

private:

??? list<Command*> orders;

public:

??? //下單

??? void setOrder(Command *command)

??? {

??????? orders.push_back(command);

??? }

??? //取消訂單

??? void cancelOrder(Command *command)

??? {

??? }

??? //發出通知

??? void notify()

??? {

??????? list<Command*>::iterator iter = orders.begin();

??????? while (iter != orders.end())

??????? {

??????????? (*iter)->executeCommand();

??????????? iter++;

??????? }

??? }

};

?

?

int main()

{

?

??? Barbecuer *boy = new Barbecuer();

??? Command *bm1 = new BakeMuttonCommand(boy);

??? Command *bm2 = new BakeMuttonCommand(boy);

??? Command *bc1 = new BakeChikenWingCommand(boy);

?

??? Waiter2 *girl = new Waiter2();

?

??? girl->setOrder(bm1);

??? girl->setOrder(bm2);

??? girl->setOrder(bc1);

?

??? girl->notify();

?

?

??? cin.get();

?

??? return 0;

}

運行結果如下:

總結

以上是生活随笔為你收集整理的13.命令模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。