尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
設計模式之命令模式-使用命令模式做到遙控器及總結
先來看看項目結構:
說明:
1:命令接口對象
2:電燈打開或關閉命令
3:音響打開或關閉命令
4:音響音量增加或減少命令
來源:凱哥Java(kaigejava)
電燈開或關代碼:
/**
* 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();
}
}
增加音響音量的類:
/**
* 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);
}
}
}
命令模式總結:
1:內容
什麼是命令模式?命令模式定義。參見上一篇
2:角色
invoker:調用者(如遙控器對象)
Command:命令接口或抽象類(如命令案例中命令接口)
received命令具體做到類(如電燈開對象、音響音量加/減對象)
3:執行順序
調用者–>接收者–>命令
4:使用場景
當行為的請求者與行為的做到者之間需要解耦的時候(如遙控器項目,請求者是遙控器,行動做到者是各個不同的家電設備),這種場景下可以使用
5:何時使用
在某些場合,比如要對行為進行”記錄、撤銷/重做、事務”等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將”行為請求者”與”行為做到者”解耦?將一組行為抽象為對象,可以做到二者之間的松耦合。在某些場合,比如要對行為進行”記錄、撤銷/重做、事務”等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將”行為請求者”與”行為做到者”解耦?將一組行為抽象為對象,可以做到二者之間的松耦合。
6:優缺點
優點:
1、降低了系統耦合度;
2、新的命令可以很容易添加到系統中去。
缺點:
使用命令模式可能會導致某些系統有過多的具體命令類。比如我們遙控器項目中就多了很多具體命令對象。
7:注意事項
系統需要支持命令的撤銷(Undo)操作和恢復(Redo)操作,也可以考慮使用命令模式
>設計模式之命令模式-使用命令模式做到遙控器及總結