1.动机(解决的问题)
在软件构建过程中,我们经常需要,为一些对象建立与其相关对象的“通知依赖关系”,当该对象状态发生变化时,与其相关对象能及时接收到通知。如果这样的依赖关系过于紧密,将使软件不能很好的反应变化。需要有一种方式,能弱化这种依赖关系,使依赖关系更稳定,实现软件结构的松耦合。
2.模式概述:
定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主题对象。这样以来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
3.实现方式:
- 涉及四种角色:抽象主题(抽象被观察者)、具体主题(具体被观察者)、抽象订阅者(抽象观察者)、具体订阅者(具体观察者)
- 具体主题内部维护一个抽象订阅者列表,并对外提供订阅、取消订阅接口,供具体观察者调用。
- 当订阅者订阅时,主题将该订阅者添加到列表;当订阅者取消订阅时,主题将该订阅者移出列表。
- 当主题的状态发生变化时,遍历内部的订阅者列表,逐个通知到订阅者。
4.适用场景:
当一个对象状态的变化,需要其他一些对象作出相关反应,并且不关心其他对象反应的细节。