Observer模式的分析(原创)

观察者模式是一个行为型模式。

该模式定义了对象之间一种一对多的依赖关系,当一个对象的状态发生改变时(该对象的成员方法被调用),所有依赖于它的对象都会收到通知,并且自动刷新。

该模式广泛应用于MVC框之中,当Model发生变化时,依赖于Model的Views会自动随之更新。

Observer模式包含三个部分。

1. Subject,事件的发布者,Model

2. Observer,事件的订阅者,View

3. Client客户端

 

一个比较常见的Observer例子是“猫叫老鼠跑”问题,被广泛用于C#面试之中。

这个题目是这样的,需要一个猫对象,多个老鼠对象,一个女主人对象。老鼠对象和女主人对象订阅“猫叫”这个行为。然后,猫对象开始叫,老鼠对象听到后开始逃跑,女主人对象听到后醒来。

如何实现之?关键问题在于两个地方。

1. 老鼠对象和女主人对象如何订阅猫叫这个行为?

2. "猫叫"这个行为如何触发老鼠对象和女主人对象的行为?

 

关于订阅“猫叫”行为的问题,我们可以让观察者(老鼠,女主人)显示地选择目标(猫),也可以让猫来选择(观察者)。我倾向于前者。

关于“猫叫”如何触发观察者对象,基本只有一种办法,就是让猫来遍历通知所有的观察者(老鼠,主人)。

 

打完收工。

 

还有一个问题,就是为什么只有多个观察者看一个目标,俗称“围观”?能不能一个观察者看多个目标?

实现当然是不难的。但是这是不是暗合另一种设计模式,又或者复杂度太高了?容我再想想,呵呵。

posted @ 2011-01-04 15:57  毛豆子  阅读(273)  评论(0编辑  收藏  举报