码上游记

hongjian.xia的个人博客

0%

《Head First设计模式》读书笔记--观察者模式

什么是观察者模式

观察者模式在对象之间定义一对多的依赖,当一个对象改变状态,依赖它的对象都会受到通知。

观察者模式有两个角色:“主题”和“观察者”。观察者只需要在主题处注册,当主题状态发生变化的时候,就会主动通知观察者。这种实现方式,既使得观察者能及时获取到主题的变化,也简化了观察者的实现逻辑(不需要去不停地轮询,判断主题状态是否发生变化),同时减轻了主题的压力,因为观察者的轮询会造成性能损耗。

如何实现?

首先我们看一下示例的类图。

此示例中,气象数据监测器(WeatherData)是主题,一个统计布告板(StatisticsDisplay)是观察者,当统计布告板注册到气象数据检测器上时,WeatherData内部就会保留一个StatisticsDisplay的引用,当数据发生变化的时候,就会主动调用update方法通知StatisticsDisplay

实际应用

前端对DOM元素事件的监听,GUI程序中的事件监听。

我的理解

观察者模式中的观察者其实并没有真正的“观察”动作,只是告诉了主题:当你的状态发生了变化的时候通知我。所有在很多应用到观察者模式的地方,都把观察者叫做“监听器”(listener)。