作用
命令模式可將“動作的請求者”從“動作的執(zhí)行者”對象中解耦告抄;
命令模式將“請求”封裝成對象塑顺,以便使用不同的請求须误,隊列或者日志來參數(shù)化其他對象劲腿,命令對象也支持撤銷操作旭绒;
命令也可以將運算塊打包(一個接收者和一組動作),形成一個命令組合焦人,存儲挥吵,傳遞或調用它們;比如:打開一個總開關實現(xiàn)打開電源花椭,音響忽匈,電視操作;
** 實現(xiàn)方式 **
- 調用者 只關心 Command接口矿辽;
- 調用者與接收者不存在直接關系丹允,而是通過 Command接口進行通信;
- 具體命令與其對應的接收者綁定在一起袋倔,命令對象 包含接收者嫌松,讓命令對象控制接收者;
類圖
- Command接口:為所有命令的接口奕污,調用命令對象execute(),就可以讓接收者進相關的動作液走;
- ConcreteCommnad:為具體命令類碳默,實現(xiàn)Command接口,并持有一個 Receiver接收者的實例缘眶;定義了動作與接收者之間的綁定關系嘱根。調用者只需要調用execute(),發(fā)出請求巷懈,然后由她來調用接收者的處理動作该抒;實現(xiàn)解耦;
- Receiver:為命令接收者類顶燕,接收者知道如何處理命令請求凑保,任務類冈爹,都可以當接收者;
- Invoker: 為 調用者類欧引,持有命令接口對象频伤,用來調用命令對象的 execute(),用來發(fā)出命令請求;
- Client: 為客戶端芝此,客戶端負責創(chuàng)建 ConcreteCommand憋肖,并設置接收者;