假設熱水器由熱水器本體、警報器、顯示器三廠商組裝而成。熱水器僅負責燒水,不發警報不顯示溫度;水快燒開時由警報器報警、顯示器提示。此時類別結構應解耦:
public class Heater {
private int temperature;
private void BoilWater() {
for (int i = 0; i <= 100; i++) temperature = i;
}
}
public class Alarm {
private void MakeAlert(int param) {
Console.WriteLine("Alarm:嘀嘀嘀,水已經 {0} 度了:", param);
}
}
public class Display {
private void ShowMsg(int param) {
Console.WriteLine("Display:水已燒開,當前溫度:{0}度。", param);
}
}
問題:水燒開時如何通知警報器與顯示器?
Observer 模式包含兩類角色:
Heater 為 Subject,temperature 為關注點Alarm、Display 為 Observer這為委托/事件解決耦合問題奠定概念基礎。