您的位置:首页 > 其它

使用委托和事件实现观察者模式(Observer Pattern)

2012-09-08 11:09 531 查看

  观察者模式(Observer Pattern)有时又被称为订阅——发布模式,它主要应对这样的场景:需要将单一事件的通知(比如对象状态发生变化)广播给多个订阅者(观察者)。在这里我们通过C#的委托和事件来实现这一通用的模式。

  现在我们来考虑一个温度控制器的例子。假设:一个加热器(Heater)和一个制冷器(Cooler)连接到同一个温度控制器(Thermostat)。温度控制器根据温度的变化通知给加热器(Heater)和制冷器(Cooler),二者根据温度来控制自己开关。

  首先我们定义Heater类

程序入口

class Program
{
static void Main(string[] args)
{
Heater heater = new Heater(90);
Cooler cooler = new Cooler(60);
Thermostat thermostat = new Thermostat();
string temperature;
//订阅通知,这里只能使用"+="或者"+-"
thermostat.OnTemperatureChange += heater.OnTemperatureChanged;
thermostat.OnTemperatureChange += cooler.OnTemperatureChanged;

Console.Write("输入温度:");
temperature = Console.ReadLine();
thermostat.CurrentTemperature = (float.Parse(temperature));
Console.Read();
}
}


最后,需要注意:

  对OnTemperatureChange()的调用时每个订阅者都收到了通知,但是它们其实是通过顺序调用的,而不是同时调用,因为一个委托能指向另一个委托,后者又能指向其他委托。同时我们可以知道,事件就是对委托进行进一步的封装。委托是类型,事件是对象(或者对象的一个实例成员),事件的内部是用委托来实现的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: