設計模式之命令模式-使用命令模式實現遙控器及總結

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

設計模式之命令模式-使用命令模式做到遙控器及總結

先來看看項目結構:

設計模式之命令模式-使用命令模式實現遙控器及總結 科技 第1張

說明:

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)操作,也可以考慮使用命令模式

>設計模式之命令模式-使用命令模式做到遙控器及總結

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!