設計模式之命令模式

2021-07-08 18:40:54 字數 973 閱讀 3351

模式定義:

將來自客戶端的請求傳入乙個物件,從而使你可用不同的請求對客戶進行引數化。

用於「行為請求者」與「行為實現者」解耦,可實現二者之間的松耦合,以便適應變化。

分離變化與不變的因素。

遵循原則:

開閉原則;

最少知識原則;

適用場合:

(1)使用命令模式作為"callback"在物件導向系統中的替代。"callback"講的便是先將

乙個函式登記上,然後在以後呼叫此函式。

(2)需要在不同的時間指定請求、將請求排隊。乙個命令物件和原先的請求發出者可以有

不同的生命期。換言之,原先的請求發出者可能已經不在了,而命令物件本身仍然是活動的。

這時命令的接收者可以是在本地,也可以在網路的另外乙個位址。命令物件可以在串形化之

後傳送到另外一台機器上去。

(3)系統需要支援命令的撤消(undo)。命令物件可以把狀態儲存起來,等到客戶端需要撤銷

命令所產生的效果時,可以呼叫undo()方法,把命令所產生的效果撤銷掉。命令物件還可以

提供redo()方法,以供客戶端在需要時,再重新實施命令效果。

(4)如果乙個系統要將系統中所有的資料更新到日誌裡,以便在系統崩潰時,可以根據日誌裡

讀回所有的資料更新命令,重新呼叫execute()方法一條一條執行這些命令,從而恢復系統在崩

潰前所做的資料更新。

知識擴充套件:

jdk中actionlistener就是命令模式。

public class receiver

}public inte***ce ipost

@override

public void postmail(string message)

}public class sender

public void sendmail(string message)}測試

public class client

}

設計模式之命令設計模式

先來看一下命令模式的類圖 乍一看好像類很多,其實我們逐個分析他們。類圖中存在的類可以分為 invoker icommand conceretecommand receiver invoker類 上層直接調取invoker類 icommand 是對命令的抽象 conceretecommand 是命令的...

設計模式之命令模式

command pattern 將請求封裝成物件,這可以讓你使用不同的請求,佇列,或者是日誌請求來引數化其他物件,命令模式也可以支援撤銷操作。命令模式有兩種實現方式 1.在命令管理器中提供設定當前命令接受者的方法,當執行訊息或者是有訊息壓入的時候直接將命令傳送給當前設定的接受者。2.在命令管理器中建...

設計模式之命令模式

當我們有一台多功能的印表機,然後通過電腦直接進行任務,如圖 如果通過這樣的設計直接去呼叫多功能一體機的功能,就會存在此時此刻只能進行乙個任務,不允許有多個客戶端同時操作.那麼現在我們就需要考慮一種新的設計模式,叫做命令設計模式。命令設計模式 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行...