C# 观察者模式 以及 delegate 和 event

观察者模式 http://mp.weixin.qq.com/s/XkfiFKPTbOy6kGGzfQOFpA

那么什么是观察者模式?
举一个例子:
1、报社发行报纸【发布者】–报社【被观察对象】
2、你订阅报纸, 一旦有新一期的报纸发行, 新报纸就会送到你家里, 只要你一直订阅, 你就一直会收到新报纸【订阅者】–【观察者】
3、你不再订阅报纸的时候, 就收不到以后的新报纸了
4、报社运营的时候, 一直会有人去订阅或者取消订阅报纸.

发布者 + 订阅者 = 观察者模式
Publishers + Subscribers = Observer Pattern
在观察者模式里, 我们把报社叫做被观察对象(Subject), 把订阅者叫做观察者(Observers)

C# 观察者模式 以及 delegate 和 event

观察者模式是这样操作的:
C# 观察者模式 以及 delegate 和 event

C# 观察者模式 以及 delegate 和 event

C# 观察者模式 以及 delegate 和 event

观察者模式的定义就是:
一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知

C# 观察者模式 以及 delegate 和 event

谈一下松耦合

当两个对象是松耦合的时候, 他们可以进行交互, 但是却几乎不了解对方.
观察者模式下的被观察者(Subject)和观察者(Observers)就是松耦合设计的对象. 这是因为:
1.被观察者(Subject)只知道观察者实现了某个接口
2.可以随时添加观察者
3.添加新类型观察者的时候不需要修改被观察者
4.可以复用观察者或者被观察者
5.如果被观察者或观察者发生变化了, 那么这些变化不会影响到对方.

一个设计原则:
交互的对象之间应尽量设计成松耦合的. (Strive for loosely coupled designs between objects that interact.)
松耦合设计可以让我们设计出这样的系统: 因为对象之间的相互依存减小了, 所以系统可以轻松处理变化.

重新设计:
C# 观察者模式 以及 delegate 和 event

代码:
C# 观察者模式 以及 delegate 和 event

C# 观察者模式 以及 delegate 和 event

C# 观察者模式 以及 delegate 和 event