設計模式學習總結(18) 命令模式

本系列主要記錄設計模式的意圖是什麼,它要解決一個什麼問題,什麼時候可以使用它;它是如何解決的,掌握它的結構圖,記住它的關鍵代碼;能夠想到至少兩個它的應用實例,一個生活中的,一個軟件中的;這個模式的優缺點是什麼,其有哪些使用場景,在使用時要注意什麼。

尊重作者,轉載請註明曄陽的Bloghttp://blog.csdn.net/hacke2


18.命令模式


意圖:將一個請求封裝成一個對象,從而使你可以用不同的請求對客戶進行參數化
主要解決:在軟件系統中,行爲請求者與行爲實現者通常是一種緊耦合的關係,但某些場合,比如需要對行爲進行記錄、撤銷或重做、事務等處理時,這種無法抵禦變化的緊耦合的設計就不太合適.
什麼時候使用:在某些場合,比如要對行爲進行“記錄、撤銷/重做、事務”等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將“行爲請求者”與“行爲實現者”解耦?將一組行爲抽象爲對象,可以實現二者之間的鬆耦合
如何解決 :通過調用者調用接受者執行命令 順序:調用者→接受者→命令
結構圖:

關鍵代碼:定義三個角色:1、received 真正的命令執行對象 2、Command 3、invoker 使用命令對象的入口
應用實例:struts  1中的action 核心控制器ActionServlet只有一個,相當於Invoker,而模型層的類會隨着不同的應用有不同的模型類,相當於具體的Command
優點: 1. 降低了系統耦合度 2. 新的命令可以很容易添加到系統中去。 
缺點:使用命令模式可能會導致某些系統有過多的具體命令類。
使用場景:認爲是命令的地方都可以使用命令模式,比如:1、GUI中每一個按鈕都是一條命令 2、模擬CMD
注意事項:系統需要支持命令的撤銷(Undo)操作和恢復(Redo)操作也可以考慮使用命令模式,見命令模式的擴展。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章