大家都知道電視遙控器節(jié)目面板(ProgramPan)是由節(jié)目按鈕組成,通過選擇相應(yīng)的節(jié)目按鈕,就可以切換到相應(yīng)的節(jié)目屏道。
下來讓我們看看如何實(shí)現(xiàn)通過遙控器按鈕選擇節(jié)目屏道的過程吧。
1、在這里,先定義遙控器按鈕(RemoteControlButton)接口:
public interface RemoteControlButton {
public abstract void selectProgram(); //選擇節(jié)目屏道
}
2、再定義遙控器按鈕(RemoteControlButton)接口的實(shí)現(xiàn)類:
A:卡通節(jié)目按鈕(CartonProgramButton)類:
public class CartonProgramButton implements RemoteControlButton{
public void selectProgram() {
System.out.println("選擇了卡通屏道!");
}
}
B:電視劇節(jié)目按鈕(TvPlanProgramButton)類:
public class TvPlanProgramButton implements RemoteControlButton {
public void selectProgram() {
System.out.println("選擇了電視劇屏道!");
}
}
C:足球節(jié)目按鈕(FootProgramButton)類:
public class FootProgramButton implements RemoteControlButton {
public void selectProgram() {
System.out.println("選擇了足球屏道!");
}
}
3、遙控器節(jié)目面板(ProgramPan)類:用來控制節(jié)目按鈕,顯示節(jié)目
public class ProgramPan {
public static List programList() {
List list = new ArrayList(); //節(jié)目屏道按鈕列表
list.add(new CartonProgramButton()); //卡通屏道按鈕
list.add(new TvPlanProgramButton()); //電視劇屏道按鈕
list.add(new FootProgramButton()); //足球屏道按鈕
return list;
}
}
4、編寫測試類:
public class TestCommand {
public static void main(String[] args) {
List list = ProgramPan.programList(); //獲得節(jié)目屏道按鈕
for (Iterator it = list.iterator();it.hasNext();)
( (RemoteControlButton) it.next()).selectProgram(); //選擇節(jié)目屏道中對(duì)應(yīng)的節(jié)目
}
}
5、說明:
A:Command說白了就是通過選擇一個(gè)個(gè)命令,然后執(zhí)行相應(yīng)動(dòng)作。
B:Command是對(duì)行為進(jìn)行封裝的典型模式,在本例中通過遙控器節(jié)目面板(ProgramPan)這個(gè)封裝類來實(shí)現(xiàn)我們看電視節(jié)目的目的。
C:Command模式和Facade(外觀)模式似乎比較相似。都是通過封裝類來進(jìn)行訪問的。如何區(qū)分,對(duì)這點(diǎn)我也比較疑惑。