什么是观察者模式
观察者模式在对象之间定义一对多的依赖,当一个对象改变状态,依赖它的对象都会受到通知。
观察者模式有两个角色:“主题”和“观察者”。观察者只需要在主题处注册,当主题状态发生变化的时候,就会主动通知观察者。这种实现方式,既使得观察者能及时获取到主题的变化,也简化了观察者的实现逻辑(不需要去不停地轮询,判断主题状态是否发生变化),同时减轻了主题的压力,因为观察者的轮询会造成性能损耗。
如何实现?
首先我们看一下示例的类图。
此示例中,气象数据监测器(WeatherData)是主题,一个统计布告板(StatisticsDisplay)是观察者,当统计布告板注册到气象数据检测器上时,WeatherData内部就会保留一个StatisticsDisplay的引用,当数据发生变化的时候,就会主动调用update方法通知StatisticsDisplay。
实际应用
前端对DOM元素事件的监听,GUI程序中的事件监听。
我的理解
观察者模式中的观察者其实并没有真正的“观察”动作,只是告诉了主题:当你的状态发生了变化的时候通知我。所有在很多应用到观察者模式的地方,都把观察者叫做“监听器”(listener)。