命令模式定義
將一個請求封裝為一個對象,從而可用不同的請求對客戶端進行參數化,對請求排隊或者記錄請求日志,以及支持可撤銷的操作,命令模式是一種對象行為型模式,其別名為動作模式或事務模式。
命令模式結構圖
命令隊列的實現
有時候需要將多個請求排隊,當一個請求發送者發送一個請求時,不值一個請求接受者產生響應,這些請求接受者將逐個執行業務方法,完成對請求的處理。
撤銷操作的實現
通過調用名利對象的execute()方法來實現對請求的處理。如果需要撤銷請求,可通過命令類中增加一個逆向操作來實現。
請求日志:
請求日志就是將請求的歷史記錄保存下來,通常以日志文件的形式永久保存在計算機中。請求日志通常有三種。
1.一點發生斷電,需要回復到特定的狀態。
2.請求日志可以實現批量處理,在一個請求日志文件中可以存儲一系列命令對想,
3.可以將命令隊列中的所有命令對象都存儲在一個日志中。每執行一個命令則從日志文件中刪除一個對應的命令對象,防止因為斷電或者系統重啟等原因造成請求丟失,而且可以避免沖I型你發送全部命令請求時造成默寫命令的重復執行,只需執行請求日志的文件,再繼續執行文件中剩余的命令。
宏命令
又稱為組合命令,他是組合模式和命令模式的聯用的產物,宏命令是一個具體命令類,他有用一個集合屬性,在該集合中包含了對其他命令對象的引用。通常宏命令不直接與請求接受者交互,而是通過他的成員來調用接受者的方法。當調用宏命令的exeute()方法時候,講遞歸調用他的所包含的每個成員命令的excute()方法。一個宏命令的成員可以是簡單命令,還可以繼續是宏命令。
命令模式主要優缺點
優點
1.降低系統的耦合度,由于請求者和接受者之間不存在直接引用,因此請求者與接受者之間完全解耦,相同的請求這可以對應不同的接受者,同樣可以反之,
2.新的命令可以很容易的加入到系統中。由于增加的具體命令不會印象到其他類,因此增加新的具體命令類很容易,無須修改原有系統源代碼,甚至客戶端代碼,滿足開閉原則。
3.可以比較容易的設計一個命令隊列和宏命令
4.可以請求的撤銷和恢復操作提供的一個設計和實現方案。
缺點
命令模式的主要缺點是,使用命令模式可能會導致系統過多的具體命令類,因為針對每一個請求接受者的調用操作都需要設計一個具體命令類,因此在某些系統中可能需要提供大量的具體命令類,這將影響命令模式的使用。
命令模式適用場景
1.系統需要將請求調用者和請求接受者解耦,是的調用者和接受者不直接交互,請求調用者武學知道接受者的存在,也無須知道調用者是誰,接受者也無須關心合適被調用。
2.系統需要在不同的時間指定請求,將請求排隊和執行請求。一個命令對象和請求的初始化調用者可以有不同的生命期,換而言之,最初的請求發出者可能已經不在了,而命令對象本身依然是活動的。
3.系統需要支持命令的撤銷操作和恢復操作
4.系統需要將一組操作組合在一起形成宏命令。