還記得我們在觀察者模式的時候,書中讓我們接了一個寫天氣監測系統的「案子」,當時的甲方可以說是十分滿意,所以有另一個老闆慕名而來,拜託我們完成這個家電智能遙控的API。
老樣子,大老闆有些要求:
可以看到,每個類別因為是不同裝置,所以都是不一樣的方法,如果我們另外寫一個 Request()
類別,每次請求按下按鈕就執行對應功能,可能會變成⋯⋯
public class Request{
public TV tv;
public Light light;
public GarageDoor westDoor;
public void pressBtn(int btnVal){
if(btnVal == 1){
tv.on();
}
else if(btnVal == 2){
light.off();
}
else if(btnVal == 3){
light.on();
}
else{
// 隨著連接裝置跟功能數量無限增生下去⋯⋯
}
}
}
所以理想的方式是使用命令模式,讓request還有家電功能的method分開,下一篇繼續把它完成 →
Disclaimer
因為讀的是原文版,所以難免會有翻譯詞不達意或是專有名詞上的差異,有錯誤的話歡迎在留言區一起交流!