使用委托和事件实现观察者模式(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()的调用时每个订阅者都收到了通知,但是它们其实是通过顺序调用的,而不是同时调用,因为一个委托能指向另一个委托,后者又能指向其他委托。同时我们可以知道,事件就是对委托进行进一步的封装。委托是类型,事件是对象(或者对象的一个实例成员),事件的内部是用委托来实现的。
相关文章推荐
- C#中使用委托和事件实现观察者模式(observer pattern)
- C#中使用委托和事件实现观察者模式(observer pattern)
- 使用委托和事件实现观察者模式(Observer Pattern)
- 如何使用委托与事件来实现观察者模式
- .Net中使用事件和委托实现Observer模式(二)
- .Net中使用事件和委托实现Observer模式(一)
- 委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别
- 设计模式------观察者模式(ObserverPattern)和委托事件
- 观察者模式(Observer Pattern)(三):使用java内置的支持实现HeadFirst气象站
- 委托、事件、Observer观察者模式的使用解析二
- 委托、事件、Observer观察者模式的使用解析一
- Observer 设计模式 了解委托与事件的使用
- Observer 设计模式(委托和事件的使用)
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- 设计模式 - 观察者模式(Observer Pattern) Java内置 使用方法
- 在C++中使用事件回调机制(通过Observer模式、函数指针等实现)
- 委托 事件 实现观察者模式
- C# ~ 从 委托事件 到 观察者模式 - Observer
- 使用UnrealScript实现基于观察者模式的事件系统
- Java 语言使用 Observer/Observable 实现简单的观察者模式