設計模式 命令模式

2021-06-16 07:03:09 字數 2622 閱讀 9250

1、command.h

#ifndef command_h

#define command_h

#include #include #include using namespace std;

class chef //廚師,具體命令的執行者

;class command //命令基類

;class makemuttoncommand : public command //具體命令,繼承命令基類,與廚師具體命令的執行者相聯絡

;class makechickenwingcommand : public command 具體命令,繼承命令基類,與廚師具體命令的執行者相聯絡

;class waiter //侍者、服務員,命令的接收者和協調者

;#endif // command_h

2、command.cpp

#include "command.h"

chef::chef(){}

chef::~chef(){}

void chef::makechickenwing()

void chef::makemutton()

command::command(chef *c)

command::~command(){}

makemuttoncommand::makemuttoncommand(chef *c):command(c){}

void makemuttoncommand::excutecommand()

makechickenwingcommand::makechickenwingcommand(chef *c):command(c){}

void makechickenwingcommand::excutecommand()

waiter::waiter(){}

waiter::~waiter(){}

void waiter::addorder(command *order)

void waiter::removeorder(command *order)

}void waiter::notifyexcute()

}

3、main.cpp

/*

開發ide:qt creater

開發環境:qt c++

參考**:神秘果:

定義:命令模式(command):將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化;

對請求排隊或記錄請求日誌,以及支援可撤銷的操作。

理解:1.客戶只需要知道向waiter發出命令(多個命令),而不是將命令直接傳達給具體的執行者。

當然,客戶是需要知道都有什麼命令的。

2.客戶只發命令,不需要知道由誰來執行和怎麼執行,體現出高內聚的特點。

使用者在發出命令後,是允許撤回的,所以還可以增加乙個命令「undo 」,undo是狀態的變更。

3.命令模式(command)把請求封裝成乙個物件,使請求能夠儲存更多的資訊擁有更多的能力。

命令模式同樣能夠把請求的傳送者和接收者解耦,但它不關心請求將以何種方式被處理。

命令模式經常與職責鏈模式(chain of responsibility)和組合模式(composite)一起使用,

職責鏈模式處理命令模式封裝的物件,組合模式可以把簡單的命令物件組合成複雜的命令物件。

要點:1.是消除被呼叫函式的選擇與那個函式被呼叫的位置之間的聯絡。

命令模式就是乙個函式物件:乙個作為物件的函式。通過將函式封裝為物件,就能夠以引數的形式將其傳遞給其他函式或者物件。

2.是允許向乙個函式或者物件傳遞乙個想要的動作。

命令模式的乙個常見的例子就是在應用程式中「撤銷操作」功能的實現。每次在使用者進行某項操作的時候,

相應的「撤銷操作」命令物件就被置入乙個佇列中,而每個命令物件被執行後,程式的狀態就倒退一步。

應用:廚師chef可以做兩個動作命令:makemutton和makechickenwing;服務員侍者waiter負責命令的接收和協調;

使用者client可以建立多種命令,服務員waiter負責將這些命令新增或刪除形成一條佇列。

使用者client呼叫服務員侍者waiter執行些佇列中的命令。

以上文字說明,從網上整理而來,有可能部分與其他同仁相同,請諒解,希望我們能夠共同交流,謝謝!

*/int main(int argc, char *argv)

執行結果:

=== jhluroom start *****===

add order

add order

add order

add order

notifyexcute for 1 is:

****** mutton

****** mutton

****** chickenwing

****** chickenwing

remove order

remove order

notifyexcute for 2 is:

****** mutton

****** chickenwing

=== jhluroom finish _^_ ===

設計模式 命令設計模式

一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...

設計模式 命令模式

1 命令模式的角色組成 1 命令角色 command 生命執行操作的介面。介面或抽象類來實現。2 具體命令角色 concrete command 將乙個接收者物件繫結於乙個動作 呼叫接收者相應的操作,以實現命令角色宣告的執行操作的介面。3 客戶角色 client 建立乙個具體命令物件 並可以設定它的...

設計模式 命令模式

命令模式 將 請求 封裝成物件,以便使用不同的請求 佇列或者日誌來引數化其他物件。命令模式也支援可撤銷的操作。命令者將物件動作和接收者包進物件中,public inte ce command public class lightoncommand implements command public ...