設(shè)計(jì)模式之命令模式-使用命令模式實(shí)現(xiàn)遙控器及總結(jié)
創(chuàng)新互聯(lián)公司服務(wù)緊隨時(shí)代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過(guò)十余年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計(jì)師、專(zhuān)業(yè)的網(wǎng)站實(shí)施團(tuán)隊(duì)以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶(hù)要求對(duì)網(wǎng)站進(jìn)行成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、建設(shè)、維護(hù)、更新和改版,實(shí)現(xiàn)客戶(hù)網(wǎng)站對(duì)外宣傳展示的首要目的,并為客戶(hù)企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。
先來(lái)看看項(xiàng)目結(jié)構(gòu):
說(shuō)明:
1:命令接口對(duì)象
2:電燈打開(kāi)或關(guān)閉命令
3:音響打開(kāi)或關(guān)閉命令
4:音響音量增加或減少命令
來(lái)源:凱哥Java(kaigejava)
電燈開(kāi)或關(guān)代碼:
/**
Created by kaigejava on 2019/8/30.
*/
public class LightOffCommand implements ICommandInterface{
private LightAPI light;
public LightOffCommand(LightAPI light){
this.light = light;
}
@Override
public void execute() {
light.Off();
}
@Override
public void undo() {
light.On();
}
}
增加音響音量的類(lèi):
/**
Created by kaigejava on 2019/8/30.
*/
public class StereoAddVolCommand implements ICommandInterface{
private StereoAPI setreo;
public StereoAddVolCommand(StereoAPI stereo){
this.setreo = stereo;
}
@Override
public void execute() {
int vol= setreo.GetVol();
if(vol<11)
{
setreo.AddVolume(++vol);
}
}
@Override
public void undo() {
int vol= setreo.GetVol();
if(vol>0)
{
setreo.downVolume(--vol);
}
}
}
命令模式總結(jié):
1:內(nèi)容
什么是命令模式?命令模式定義。參見(jiàn)上一篇
2:角色
invoker:調(diào)用者(如遙控器對(duì)象)
Command:命令接口或抽象類(lèi)(如命令案例中命令接口)
received命令具體實(shí)現(xiàn)類(lèi)(如電燈開(kāi)對(duì)象、音響音量加/減對(duì)象)
3:執(zhí)行順序
調(diào)用者-->接收者-->命令
4:使用場(chǎng)景
當(dāng)行為的請(qǐng)求者與行為的實(shí)現(xiàn)者之間需要解耦的時(shí)候(如遙控器項(xiàng)目,請(qǐng)求者是遙控器,行動(dòng)實(shí)現(xiàn)者是各個(gè)不同的家電設(shè)備),這種場(chǎng)景下可以使用
5:何時(shí)使用
在某些場(chǎng)合,比如要對(duì)行為進(jìn)行"記錄、撤銷(xiāo)/重做、事務(wù)"等處理,這種無(wú)法抵御變化的緊耦合是不合適的。在這種情況下,如何將"行為請(qǐng)求者"與"行為實(shí)現(xiàn)者"解耦?將一組行為抽象為對(duì)象,可以實(shí)現(xiàn)二者之間的松耦合。在某些場(chǎng)合,比如要對(duì)行為進(jìn)行"記錄、撤銷(xiāo)/重做、事務(wù)"等處理,這種無(wú)法抵御變化的緊耦合是不合適的。在這種情況下,如何將"行為請(qǐng)求者"與"行為實(shí)現(xiàn)者"解耦?將一組行為抽象為對(duì)象,可以實(shí)現(xiàn)二者之間的松耦合。
6:優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1、降低了系統(tǒng)耦合度;
2、新的命令可以很容易添加到系統(tǒng)中去。
缺點(diǎn):
使用命令模式可能會(huì)導(dǎo)致某些系統(tǒng)有過(guò)多的具體命令類(lèi)。比如我們遙控器項(xiàng)目中就多了很多具體命令對(duì)象。
聯(lián)系凱哥--》凱哥Java(kaigejava)或凱哥個(gè)人博客:www.kaigejava.com 博客上私聊凱哥哦~
7:注意事項(xiàng)
系統(tǒng)需要支持命令的撤銷(xiāo)(Undo)操作和恢復(fù)(Redo)操作,也可以考慮使用命令模式