代码改变世界

Design Pattern 设计模式【观察者】

2009-11-26 09:33  Virus-BeautyCode  阅读(1730)  评论(2编辑  收藏  举报

  观察者设计模式中存在两种角色: 观察者被观察者

  最经典的例子就是“猫叫了,老鼠跑了,惊醒了主人。”,这个例子也是我以前去微软面试的时候碰到的一个面试题,当时就是让我设计一下这个过程的实现框架。

  在这个例子中,老鼠和主人其实就是观察者,而猫属于被观察者,老鼠和主人观察猫的变化,猫有了动作,老鼠和主人就要做出响应。被观察者,就是这个过程,也可以叫做整个事件的根本原因,亦可以叫直接导火索。 

  从上面这个例子不难看出,观察者和被观察者的关系通常是n:1,也就是多个多个观察者观察一个被观察者。 

  这样就给我们一个小小的提示,通过这个提示就可以很容易的找出被观察者。猫,也就是观察的内容,或者观察的被动者,猫所在的角色就是被观察者;老鼠和主人,也就是观察的主体,动作的出发者,他们的角色就是观察者。

  当然了,实际的项目中,这个过程肯定没有这么简单,这时候需要我们把大过程,分解成很多的小过程,分层级的找出观察者和被观察者,分层级的使用观察者模式。

  下面给出我写的一个完整代码,欢迎大家一起讨论。

      完整代码:/Files/virusswb/BeautyCode.DesignPattern.Observer.rar

  代码包括两个部分,首先是普通的观察者模式,也就是在被观察者中注册观察者,多个观察者通过一个荣起来管理,然后向观察者发送通知。

   

普通的观察者模式

 

  第二种是在.NET 框架的基础之上的观察者,也就是事件委托类型的观察者,不需要在被观察者中注册观察者,降低了观察者和被观察者的耦合度。

 

以事件委托为基础的观察者模式

 

 

  下面是他们的调用代码,是一个Console应用程序

 

Observer 代码调用