作用
命令模式可將“動(dòng)作的請(qǐng)求者”從“動(dòng)作的執(zhí)行者”對(duì)象中解耦;
命令模式將“請(qǐng)求”封裝成對(duì)象,以便使用不同的請(qǐng)求,隊(duì)列或者日志來(lái)參數(shù)化其他對(duì)象,命令對(duì)象也支持撤銷(xiāo)操作;
命令也可以將運(yùn)算塊打包(一個(gè)接收者和一組動(dòng)作),形成一個(gè)命令組合,存儲(chǔ),傳遞或調(diào)用它們;比如:打開(kāi)一個(gè)總開(kāi)關(guān)實(shí)現(xiàn)打開(kāi)電源,音響,電視操作;
** 實(shí)現(xiàn)方式 **
- 調(diào)用者 只關(guān)心 Command接口;
- 調(diào)用者與接收者不存在直接關(guān)系,而是通過(guò) Command接口進(jìn)行通信;
- 具體命令與其對(duì)應(yīng)的接收者綁定在一起,命令對(duì)象 包含接收者,讓命令對(duì)象控制接收者;
類(lèi)圖

Paste_Image.png
- Command接口:為所有命令的接口,調(diào)用命令對(duì)象execute(),就可以讓接收者進(jìn)相關(guān)的動(dòng)作;
- ConcreteCommnad:為具體命令類(lèi),實(shí)現(xiàn)Command接口,并持有一個(gè) Receiver接收者的實(shí)例;定義了動(dòng)作與接收者之間的綁定關(guān)系。調(diào)用者只需要調(diào)用execute(),發(fā)出請(qǐng)求,然后由她來(lái)調(diào)用接收者的處理動(dòng)作;實(shí)現(xiàn)解耦;
- Receiver:為命令接收者類(lèi),接收者知道如何處理命令請(qǐng)求,任務(wù)類(lèi),都可以當(dāng)接收者;
- Invoker: 為 調(diào)用者類(lèi),持有命令接口對(duì)象,用來(lái)調(diào)用命令對(duì)象的 execute(),用來(lái)發(fā)出命令請(qǐng)求;
- Client: 為客戶端,客戶端負(fù)責(zé)創(chuàng)建 ConcreteCommand,并設(shè)置接收者;