c 設計模式 命令模式

2021-10-02 16:21:53 字數 1700 閱讀 2541

在軟體開發系統中,常常出現「方法的請求者」與「方法的實現者」之間存在緊密的耦合關係。這不利於軟體功能的擴充套件與維護。例如,想對行為進行「撤銷、重做、記錄」等處理都很不方便,因此「如何將方法的請求者與方法的實現者解耦?」變得很重要,命令模式能很好地解決這個問題。

在現實生活中,這樣的例子也很多,例如,電視機遙控器(命令傳送者)通過按鈕(具體命令)來遙控電視機(命令接收者),還有計算機鍵盤上的「功能鍵」等

命令(command)模式的定義如下:將乙個請求封裝為乙個物件,使發出請求的責任和執行請求的責任分割開。這樣兩者之間通過命令物件進行溝通,這樣方便將命令物件進行儲存、傳遞、呼叫、增加與管理。

降低系統的耦合度。命令模式能將呼叫操作的物件與實現該操作的物件解耦。

增加或刪除命令非常方便。採用命令模式增加與刪除命令不會影響其他類,它滿足「開閉原則」,對擴充套件比較靈活。

可以實現巨集命令。命令模式可以與組合模式結合,將多個命令裝配成乙個組合命令,即巨集命令。

方便實現 undo 和 redo 操作。命令模式可以與後面介紹的備忘錄模式結合,實現命令的撤銷與恢復。

可能產生大量具體命令類。因為計對每乙個具體操作都需要設計乙個具體命令類,這將增加系統的複雜性

命令模式是一種使用頻率非常高的設計模式,它可以將請求傳送者與接收者解耦,請求傳送者通過命令物件來間接引用請求接收者,使得系統具有更好的靈活性和可擴充套件性。在基於gui的軟體開發,無論是在電腦桌面應用還是在移動應用中,命令模式都得到了廣泛的應用

在以下情況下可以考慮使用命令模式:

可以將系統中的相關操作抽象成命令,使呼叫者與實現者相關分離,其結構如下。

1. 模式的結構

命令模式包含以下主要角色。

抽象命令類(command)角色:宣告執行命令的介面,擁有執行命令的抽象方法 execute()。

具體命令角色(concrete    command)角色:是抽象命令類的具體實現類,它擁有接收者物件,並通過呼叫接收者的功能來完成命令要執行的操作。

其結構圖如圖 1 所示。

命令實現:

// 命令模式簡單框架

#include #include using namespace std;

class receiver

};/* command類:用來宣告執行操作的介面 */

class command

virtual void execute() = 0;

protected:

receiver* mreceiver;

};/*

** concretecommand類 :將乙個接收者物件繫結於乙個動作,

** 呼叫接收者相應的操作,以實現execute

*/class concretecommand : public command

void execute() };

/* invoker類 :要求該命令執行這個操作 */

class invoker

/* 命令執行相應的操作 */

void executecommand()

private:

command* mcommand;

};int main()

1.用命令模式實現客戶去餐館吃早餐的例項:

2.

C 設計模式 命令模式

命令模式 command 將乙個請求封裝為乙個物件,從而使你可以不同的請求對客戶進行引數化 對請求排隊或記錄請求日誌,以及支援可撤銷的操作。命令模式結構圖 command類,用來宣告執行操作的介面。class command protected receiver receiver public co...

c 設計模式(命令模式)

good 一 建立命令佇列 二 可以將命令記入日誌 三 接收請求的一方可以拒絕 四 新增乙個新命令類不影響其它類 命令模式把請求乙個操作的物件與知道怎麼操行乙個操作的物件分開 例 include include include using namespace std 烤肉師傅 class barbu...

c 設計模式 命令模式

一 命令 command 模式 命令 command 模式屬於物件的行為模式 gof95 命令模式又稱為行動 action 模式或交易 transaction 模式。命令模式把乙個請求或者操作封裝到乙個物件中。命令模式允許系統使用不同的請求把客戶端引數化,對請求排隊或者記錄請求日誌,可以提供命令的撤...