观察者模式一直是架构设计中的重点模式
比较常用的案例就是烧开水
流程:烧水-->水烧开-->屏幕外显温度,报警器报警
核心:委托和事件
public delegate void WaterHeated(int i); public class WaterMachine { public event WaterHeated onWaterHeated; public void HeatWater() { for (int i = 0; i < 11; i++) { if (i < 10) { Thread.Sleep(1000); Console.WriteLine("水正在加热"); } else { OnWaterHeated(i); } } } internal void OnWaterHeated(int i) { if (onWaterHeated != null) { onWaterHeated(i); } } } public class Screen { public void ShowTemprature(int i) { Console.WriteLine("当前温度:{0}", i.ToString()); } } public class Beeper { public void Alarm(int i) { Console.WriteLine("水已烧开"); } }
static void Main(string[] args) { //观察者 WaterMachine wm = new WaterMachine(); wm.onWaterHeated += (new Screen()).ShowTemprature; wm.onWaterHeated += (new Beeper()).Alarm; wm.HeatWater(); Console.ReadKey(); }