22、Command 命令模式
阿新 • • 發佈:2020-08-06
1、command 命令模式
命令模式(Command Pattern):在軟件設計中,我們經常需要向某些對象發送請求,但是並不知道請求的接收者是誰,也不知道被請求的操作是哪個,我們只需在程序運行時指定具體的請求接收者即可,此時,可以使用命令模式來進行設計 命名模式使得請求發送者與請求接收者消除彼此之間的耦合,讓對象之間的調用關系更加靈活,實現解耦。
在命名模式中,會將一個請求封裝為一個對象,以便使用不同參數來表示不同的請求(即命名),同時命令模式也支持可撤銷的操作。
通俗易懂的理解:將軍發布命令,士兵去執行。其中有幾個角色:將軍(命令發布者)、士兵(命令的具體執行者)、命令(連接將軍和士兵)。
意圖:將一個請求封裝成一個對象,從而使您可以用不同的請求對客戶進行參數化。
主要解決:在軟件系統中,行為請求者與行為實現者通常是一種緊耦合的關系,但某些場合,比如需要對行為進行記錄、撤銷或重做、事務等處理時,這種無法抵御變化的緊耦合的設計就不太合適。
何時使用:在某些場合,比如要對行為進行"記錄、撤銷/重做、事務"等處理,這種無法抵御變化的緊耦合是不合適的。在這種情況下,如何將"行為請求者"與"行為實現者"解耦?將一組行為抽象為對象,可以實現二者之間的鬆耦合。
2、示例代碼
2.1 撤銷操作的實現
一個簡易計算器,該計算器可以實現簡單的數學運算,還可以對運算實施撤銷操作。
//加法類:請求接收者
classAdder{privateintnum=0;//定義初始值為0
//加法操作,每次將傳入的值與num作加法運算,再將結果返回
publicintadd(intvalue){
num+=value;
returnnum;
}
}
//抽象命令類
abstractclassAbstractCommand{
pu