事件流程:
此即 GoF 定義的 Observer 設計模式:定義對象間一對多依賴,狀態改變時自動通知並更新依賴者,屬鬆耦合模式。
實作 Observer 模式:
using System;
namespace Delegate {
public class Heater {
private int temperature;
public delegate void BoilHandler(int param);
public event BoilHandler BoilEvent;
public void BoilWater() {
for (int i = 0; i <= 100; i++) {
temperature = i;
if (temperature > 95 && BoilEvent != null) {
BoilEvent(temperature);
}
}
}
}
public class Alarm {
public void MakeAlert(int param) {
Console.WriteLine("Alarm:嘀嘀嘀,水已經 {0} 度了:", param);
}
}
public class Display {
public static void ShowMsg(int param) {
Console.WriteLine("Display:水快燒開了,當前溫度:{0}度。", param);
}
}
class Program {
static void Main() {
Heater heater = new Heater();
Alarm alarm = new Alarm();
heater.BoilEvent += alarm.MakeAlert;
heater.BoilEvent += (new Alarm()).MakeAlert;
heater.BoilEvent += Display.ShowMsg;
heater.BoilWater();
}
}
}
此版本使用簡單 int 參數而非 EventArgs,展示委托/事件核心機制,為後續規範化版本鋪墊。