[设计模式]观察者模式

观察者模式比较容易理解,也可以称作订阅/发布模式,C#中的委托/事件就是一种实现。观察者模式定义了对象间的一对多依赖,当一个对象状态改变时,其所有依赖者都会收到通知并自动更新。通俗的说,有一个被观察者,和许多的观察者,当被观察者发出通知的时候,观察者都会知道,并且做出自己的动作。

实现的时候,被观察者中需要有一个观察者列表,用来添加/删除观察者,并且在自己状态改变时调用观察者的方法,实现观察者的更新;观察者需要知道(也可以不知道)被观察者,取决于观察者是否需要使用被观察者中的数据。

类图:

C#中的委托/事件是对观察者模式很好的一个实现,这个实现的好处在于对已经封装好的类,是不可能用观察者接口的,并且更新的方法名也是不同的。C#的做法是在被观察者中声明一个委托 delegate void EventHandler() ,声明一个事件 public event EventHandler Update ,委托 void EventHandler() 相当于定义了抽象函数类,返回值和参数列表是确定的,事件 update 相当于一个函数列表,函数的类型就是委托的 EventHandler 。这样在被观察者的通知函数中,直接调用 Update() 。这时被观察者是不知道观察者的,需要在客户端绑定观察者的动作,客户端中的代码大致是

被观察者.Update += new EventHandler(观察者.函数);
被观察者.通知函数;

其中观察者.函数的返回值和参数列表和委托EventHandler是一样的,这样观察者就可以是不同的类了。

参考:《Head First设计模式》

原文地址:https://www.cnblogs.com/belloworld/p/5699857.html