您好,登錄后才能下訂單哦!
設計模式之命令模式-使用命令模式實現遙控器及總結
先來看看項目結構:
說明:
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、新的命令可以很容易添加到系統中去。
缺點:
使用命令模式可能會導致某些系統有過多的具體命令類。比如我們遙控器項目中就多了很多具體命令對象。
聯系凱哥--》凱哥Java(kaigejava)或凱哥個人博客:www.kaigejava.com 博客上私聊凱哥哦~
7:注意事項
系統需要支持命令的撤銷(Undo)操作和恢復(Redo)操作,也可以考慮使用命令模式
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。