定義 將“請(qǐng)求”封裝成對(duì)象,以便使用不同的請(qǐng)求、隊(duì)列或者日志來參數(shù)化其他對(duì)象。命令模式也支持可撤銷的操作。 要點(diǎn) 命令模式將發(fā)出請(qǐng)求的對(duì)象和接受請(qǐng)求的對(duì)象解耦; 在被解耦的兩者之間是通過命令對(duì)象進(jìn)行溝通的。命令對(duì)象封裝了接收者和一個(gè)或者一組對(duì)象; 調(diào)用者通過調(diào)用命令對(duì)象的execute()發(fā)出請(qǐng)求,這會(huì)使得接受者的動(dòng)作被調(diào)用; 調(diào)用者可以接受命令當(dāng)作參數(shù),甚至在運(yùn)行時(shí)動(dòng)態(tài)地進(jìn)行; 命令也可以實(shí)現(xiàn)日志和實(shí)務(wù)系統(tǒng)。 所涉及的角色: 1.客戶(Client)角色:創(chuàng)建一個(gè)具體對(duì)象及其確定接收者. 2.命令(Command)角色:聲明了一個(gè)給所有具體命令類的抽象接口。 3.具體命令(ConcreteCommand)角色:定義一個(gè)接收者與行為之間的弱耦合,實(shí)現(xiàn)exceute()方法,負(fù)責(zé)調(diào)用接收者的相應(yīng)操作。 4.請(qǐng)求者(Invoker)角色:負(fù)責(zé)調(diào)用命令對(duì)象執(zhí)行請(qǐng)求。 5.接收者(Recevice)角色:負(fù)責(zé)具體實(shí)施與執(zhí)行一個(gè)請(qǐng)求。 優(yōu)點(diǎn): 解耦了發(fā)送者和接受者之間聯(lián)系。 發(fā)送者調(diào)用一個(gè)操作,接受者接受請(qǐng)求執(zhí)行相應(yīng)的動(dòng)作,因?yàn)槭褂肅ommand模式解耦,發(fā)送者無需知道接受者任何接口。 命令模式創(chuàng)建的一般步驟: 1.客戶端創(chuàng)建一個(gè)ConcreteCommand對(duì)象,并指明接收者。 2.請(qǐng)求對(duì)象保持ConcreteCommand對(duì)象。 3.請(qǐng)求對(duì)象通過調(diào)用action方法發(fā)出請(qǐng)求,若命令是可撤消,則ConcreteCommand保存execute()方法執(zhí)行前的狀態(tài)。 4.ConcreteCommand對(duì)象調(diào)用接收的方法執(zhí)行請(qǐng)求。 實(shí)例 抽象命令接口:
具體命令
接收者:
請(qǐng)求者:
客戶端:
命令模式與責(zé)任鏈模式區(qū)別: 責(zé)任鏈模式使一個(gè)特定的請(qǐng)求接收對(duì)象對(duì)請(qǐng)求與命令的執(zhí)行變得不確定性.而命令模式使得一個(gè)特定的對(duì)象對(duì)命令的執(zhí)行變得明顯與確定. 參考資料:《First Head 設(shè)計(jì)模式》 設(shè)計(jì)模式學(xué)習(xí)筆記(十五)--------命令(Command)模式
Powered by: BlogJava Copyright © sailor