命令模式定義:將“請(qǐng)求”封裝成對(duì)象,以便使用不同的請(qǐng)求、隊(duì)列或者日志來參數(shù)化其他對(duì)象。命令模式也支持可撤銷的操作。
命令模式,封裝方法調(diào)用,命令模式可將“動(dòng)作的請(qǐng)求者”從“動(dòng)作的執(zhí)行者”對(duì)象中解耦。類圖,如下:
成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括牟定網(wǎng)站建設(shè)、牟定網(wǎng)站制作、牟定網(wǎng)頁制作以及牟定網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,牟定網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到牟定省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
生活中例子:餐廳點(diǎn)菜(顧客,服務(wù)員,廚師關(guān)系,顧客訂單告訴服務(wù)員就是,不用直接廚師打交道,廚師收到服務(wù)員的發(fā)來的訂單后開始做好大餐)。
命令模式的優(yōu)點(diǎn):
● 在命令模式中, 請(qǐng)求者不直接與接收者交互, 即請(qǐng)求者不包含接收者的引用, 因此徹底消除了彼此之間的耦合.
● 命令模式滿足"開-閉"原則. 如果增加新的具體命令和該命令的接收者, 不必修改調(diào)用者的代碼, 調(diào)用者就可以使用新的命令對(duì)象; 反之, 如果增加新的調(diào)用者, 不必修改現(xiàn)有的具體命令和接收者, 新增加的調(diào)用者就可以使用自己已有的具體命令
● 由于請(qǐng)求者被封裝到了具體命令中, 那么就可以將具體命令保存到持久化的媒介中, 在需要的時(shí)候, 重新執(zhí)行這個(gè)具體命令. 因此使用命令模式可以記錄日志.
● 使用命令模式可以對(duì)請(qǐng)求者的"請(qǐng)求"進(jìn)行排隊(duì). 每個(gè)請(qǐng)求都各自對(duì)應(yīng)一個(gè)具體命令,因此可以按照一定的順序執(zhí)行這些命令.
命令模式的使用場景:
● 命令模式將發(fā)出請(qǐng)求的對(duì)象和執(zhí)行請(qǐng)求的對(duì)象進(jìn)行解耦
● 用于隊(duì)列請(qǐng)求,命令對(duì)象和一般對(duì)象一樣可以被傳來傳去,只要實(shí)現(xiàn)統(tǒng)一的接口方法,可以被任意調(diào)用
● 用于日志請(qǐng)求,將所有動(dòng)作記錄在日志中,以便系統(tǒng)死機(jī)后能夠重新調(diào)用來恢復(fù)
案例1:實(shí)現(xiàn)一個(gè)家庭自動(dòng)化遙控器,能遙控?zé)?,空調(diào),,,等設(shè)備的開/關(guān)。(硬件api類是廠家提供),類圖如下:
更多需求思考?
● 如果需要撤銷命令,怎么修改呢?
● 如果需要組合命令,比如(先打開燈,然后打開電視,然后打開熱水器,打開影響),這么實(shí)現(xiàn)呢?
● 如命令需要跨jvm,跨機(jī)器執(zhí)行,怎么實(shí)現(xiàn)呢?
● 如果需要宕機(jī)后恢復(fù)數(shù)據(jù),怎么實(shí)現(xiàn)呢?