定義
將“請求”封裝成對象,以便使用不同的請求、隊列或者日志來參數化其他對象。命令模式也支持可撤銷的操作。
要點
命令模式將發出請求的對象和接受請求的對象解耦;
在被解耦的兩者之間是通過命令對象進行溝通的。命令對象封裝了接收者和一個或者一組對象;
調用者通過調用命令對象的execute()發出請求,這會使得接受者的動作被調用;
調用者可以接受命令當作參數,甚至在運行時動態地進行;
命令也可以實現日志和實務系統。
所涉及的角色:
1.客戶(Client)角色:創建一個具體對象及其確定接收者.
2.命令(Command)角色:聲明了一個給所有具體命令類的抽象接口。
3.具體命令(ConcreteCommand)角色:定義一個接收者與行為之間的弱耦合,實現exceute()方法,負責調用接收者的相應操作。
4.請求者(Invoker)角色:負責調用命令對象執行請求。
5.接收者(Recevice)角色:負責具體實施與執行一個請求。
優點:
解耦了發送者和接受者之間聯系。 發送者調用一個操作,接受者接受請求執行相應的動作,因為使用Command模式解耦,發送者無需知道接受者任何接口。
命令模式創建的一般步驟:
1.客戶端創建一個ConcreteCommand對象,并指明接收者。
2.請求對象保持ConcreteCommand對象。
3.請求對象通過調用action方法發出請求,若命令是可撤消,則ConcreteCommand保存execute()方法執行前的狀態。
4.ConcreteCommand對象調用接收的方法執行請求。
實例
抽象命令接口:





具體命令













接收者:









請求者:













客戶端:









命令模式與責任鏈模式區別:
責任鏈模式使一個特定的請求接收對象對請求與命令的執行變得不確定性.而命令模式使得一個特定的對象對命令的執行變得明顯與確定.
參考資料:《First Head 設計模式》
設計模式學習筆記(十五)--------命令(Command)模式