將乙個請求封裝為乙個物件,從而可以使用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可撤銷操作。
能較容易的設計乙個命令佇列。
在需要的情況下,可以較容易的將命令記入日誌。
允許接受請求的一方決定是否要否決請求。
可以容易的實現對請求的撤銷和重做。
由於加進具體命令類不影響其他的類,因此增加新的具體命令操作很容易。
最重要一點就是:命令模式把請求乙個操作的物件和怎麼執行乙個操作的物件解耦。
飯店點餐問題。客人點餐是請求乙個操作;客人修改點的選單是對已有操作的修改;後廚根據客人下的單做菜,是執行乙個操作;但客人並不需要和後廚直接打交道,而是通過服務員完成點餐、修改菜,在沒有食材的情況下否決客人的請求操作。
}//撤銷請求
public void cancelorder(abstractcommand command)
//通知後廚做菜
public void notifycook()
}敏捷開發原則告訴我們:不要為**新增基於猜測的、實際不需要的功能。如果不清楚是否要用命令模式,一般就不要實現。在需要的時候通過重構再去實現這個模式,只有在真正需要如「撤銷/恢復」操作等功能時,把原來的**重構為命令模式才有意義。
23種設計模式 命令模式
在軟體構建過程中,行為請求者 與 行為實現者 通常呈現一種 緊耦合 但在某些場合 比如需要對行為進行 記錄 撤銷 重 undo redo 事務 等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將 行為請求者 與 行為實現者 解耦?將一組行為抽象為物件,可以實現二者之間的松耦合。將乙個請...
23種設計模式之命令模式
定義 將乙個請求封裝成乙個物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求日誌,可以提供命令的撤銷和恢復功能。型別 行為類模式 類圖 顧名思義,命令模式就是對命令的封裝,首先來看一下命令模式類圖中的基本結構 以上三個類的作用應該是比較好理解的,下面我們重點說一下invoker類和r...
23種設計模式之 命令模式
定義 將乙個請求封裝成乙個物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求日誌,可以提供命令的撤銷和恢復功能。型別 行為類模式 類圖 命令模式的結構 顧名思義,命令模式就是對命令的封裝,首先來看一下命令模式類圖中的基本結構 以上三個類的作用應該是比較好理解的,下面我們重點說一下in...