Observer模式的分析(原创)
观察者模式是一个行为型模式。
该模式定义了对象之间一种一对多的依赖关系,当一个对象的状态发生改变时(该对象的成员方法被调用),所有依赖于它的对象都会收到通知,并且自动刷新。
该模式广泛应用于MVC框之中,当Model发生变化时,依赖于Model的Views会自动随之更新。
Observer模式包含三个部分。
1. Subject,事件的发布者,Model
2. Observer,事件的订阅者,View
3. Client客户端
一个比较常见的Observer例子是“猫叫老鼠跑”问题,被广泛用于C#面试之中。
这个题目是这样的,需要一个猫对象,多个老鼠对象,一个女主人对象。老鼠对象和女主人对象订阅“猫叫”这个行为。然后,猫对象开始叫,老鼠对象听到后开始逃跑,女主人对象听到后醒来。
如何实现之?关键问题在于两个地方。
1. 老鼠对象和女主人对象如何订阅猫叫这个行为?
2. "猫叫"这个行为如何触发老鼠对象和女主人对象的行为?
关于订阅“猫叫”行为的问题,我们可以让观察者(老鼠,女主人)显示地选择目标(猫),也可以让猫来选择(观察者)。我倾向于前者。
关于“猫叫”如何触发观察者对象,基本只有一种办法,就是让猫来遍历通知所有的观察者(老鼠,主人)。
打完收工。
还有一个问题,就是为什么只有多个观察者看一个目标,俗称“围观”?能不能一个观察者看多个目标?
实现当然是不难的。但是这是不是暗合另一种设计模式,又或者复杂度太高了?容我再想想,呵呵。