个人理解,大神不喜勿喷。
观察者模式即“一方有难,八方响应”的味道,一个被观察者和多个观察者,被观察者发生变化需要通知到所有观察它的观察者们。通知观察者们去干什么事情呢?这个由观察者自己决定。
首先,做一个观察者,有一个方法等待由被观察者去触发。
public class DiFang
{
private string Name { get; set; }
public DiFang(string name)
{
Name = name;
}
public void ZhongYangNotice(Object obj)
{
ZhongYang zhongyang = obj as ZhongYang;
if (zhongyang!=null)
{
Console.WriteLine(Name+":来通知了{0}", zhongyang.Info);
}
}
}
然后,做一个被观察者,里面有一个事件需要订阅。还有一个方法用于触发订阅了的事件。
public class ZhongYang
{
public delegate void JiHeEventHandler(object sender);
public JiHeEventHandler JiHeEvent;
public string Info { get; set; }
public void AddDiFang(JiHeEventHandler obj)
{
JiHeEvent += obj;//此事件有了需要干的事情了
}
public void JiHeNotice()
{
Info = "集合";
if (JiHeEvent!=null)
{
JiHeEvent(this);
}
}
}
委托即将方法作为参数传入,JiHeEventHandler obj即需要传入的方法。JiHeEvent(this);这一句其实就是调用了传入的方法。
客户端:
ZhongYang zhongYang = new ZhongYang();
DiFang diFang0 = new DiFang("地方0");
zhongYang.AddDiFang(diFang0.ZhongYangNotice);
DiFang diFang1 = new DiFang("地方1");
zhongYang.AddDiFang(diFang1.ZhongYangNotice);
zhongYang.JiHeNotice();
diFang0和diFang1都将自己的方法通过zhongYang.AddDiFang()传入并进行了订阅。
再补充一点,委托就是将多个方法绑定到同一个委托变量,当“调用”此变量时即JiHeEvent(this);会依次触发绑定到此委托变量上的方法,实现了“挨个通知观察者”,“+=”就是绑定过程。“-=”是解绑定过程。