java中命令模式詳解和使用方法

命令模式(Command Pattern)是一種數據驅動的設計模式,它屬於行爲型模式。請求以命令的形式包裹在對象中,並傳給調用對象。調用對象尋找能夠處理該命令的合適的對象,並把該命令傳給相應的對象,該對象執行命令。設計模式

介紹
意圖:將一個請求封裝成一個對象,從而使您能夠用不一樣的請求對客戶進行參數化。spa

主要解決:在軟件系統中,行爲請求者與行爲實現者一般是一種緊耦合的關係,但某些場合,好比須要對行爲進行記錄、撤銷或重作、事務等處理時,這種沒法抵禦變化的緊耦合的設計就不太合適。設計

什麼時候使用:在某些場合,好比要對行爲進行"記錄、撤銷/重作、事務"等處理,這種沒法抵禦變化的緊耦合是不合適的。在這種狀況下,如何將"行爲請求者"與"行爲實現者"解耦?將一組行爲抽象爲對象,能夠實現兩者之間的鬆耦合。3d

如何解決:經過調用者調用接受者執行命令,順序:調用者→接受者→命令。對象

關鍵代碼:定義三個角色:一、received 真正的命令執行對象 二、Command 三、invoker 使用命令對象的入口blog

應用實例:struts 1 中的 action 核心控制器 ActionServlet 只有一個,至關於 Invoker,而模型層的類會隨着不一樣的應用有不一樣的模型類,至關於具體的 Command。接口

優勢: 一、下降了系統耦合度。 二、新的命令能夠很容易添加到系統中去。事務

缺點:使用命令模式可能會致使某些系統有過多的具體命令類。it

使用場景:認爲是命令的地方均可以使用命令模式,好比: 一、GUI 中每個按鈕都是一條命令。 二、模擬 CMD。io

注意事項:系統須要支持命令的撤銷(Undo)操做和恢復(Redo)操做,也能夠考慮使用命令模式,見命令模式的擴展。

實現
咱們首先建立做爲命令的接口 Order,而後建立做爲請求的 Stock 類。實體命令類 BuyStock 和 SellStock,實現了 Order 接口,將執行實際的命令處理。建立做爲調用對象的類 Broker,它接受訂單並能下訂單。

Broker 對象使用命令模式,基於命令的類型肯定哪一個對象執行哪一個命令。CommandPatternDemo,咱們的演示類使用 Broker 類來演示命令模式。
QQ截圖20200523144020.png
QQ截圖20200523144026.png
QQ截圖20200523144031.png
QQ截圖20200523144037.png

相關文章
相關標籤/搜索