設計模式 命令模式

2021-09-22 06:17:42 字數 2273 閱讀 5974

之前寫的模式帖子:

設計模式系列目錄

今天說一下命令模式

命令模式 將請求封裝成物件,以便使用不同的請求、佇列或者日誌來引數化其它物件。命令模式也支援可撤銷的操作。這樣將「行為請求者」與「行為實現者」解耦,

實現松耦合

我們來看乙個類圖

電視機遙控器就是乙個典型的命令模式應用例項:

電視機是請求的接收者,遙控器是請求的傳送者,遙控器上有一些按鈕,不同的按鈕對應電視機的不同操作。

抽象命令角色由乙個命令介面來扮演,有三個具體的命令類實現了乙個抽象命令介面,這三個具體命令類分別代表三個操作:開啟電視、

關閉電視、和切換頻道。

再看一下時序圖

我們可以看到命令模式的執行順序

1. client建立乙個concretecommand物件並指定他的receiver物件 

2. 某個invoker物件儲存該concretecommand物件

3. 該invoker通過呼叫command物件的execute操作來提交乙個請求。若該命令是可撤銷的,concretecommand就在執行execute操作之前儲存

當前狀態以用於取消該命令

4. concretecommand物件對呼叫它的receiver的一些操作以執行該請求

看一下** 

publicclassclient

}

#region 命令模式

publicinte***cecommand

publicclassinvoker

publicvoidruncommand()

}

publicclassreceiver

}

publicclassconcretecommand : command

#region command 成員

publicvoidexecute()

#endregion

}

#endregion

執行結果

模式優點

1.降低物件之間的耦合度。

2.新的命令可以很容易地加入到系統中。

3.可以比較容易地設計乙個組合命令。

4.呼叫同一方法實現不同的功能

模式缺點

1.系統需要將請求呼叫者和請求接收者解耦,使得呼叫者和接收者不直接互動。

2.系統需要在不同的時間指定請求、將請求排隊和執行請求。

3.系統需要支援命令的撤銷(undo)操作和恢復(redo)操作。

4.系統需要將一組操作組合在一起,即支援巨集命令。

設計模式 命令設計模式

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

設計模式 命令模式

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

設計模式 命令模式

1 command.h ifndef command h define command h include include include using namespace std class chef 廚師,具體命令的執行者 class command 命令基類 class makemuttonco...