观察者模式是MVC模式的一种更为泛化的描述。
MVC 模式中的Model 其实就是观察者模式中的被观察者(Subject), Model的状态变化, 都会引发View 层次的变动,而MVC View层次自然就对应观察者模式中的观察者(Observer)
观察者模式顾名思义, 主要有两种角色:
观察者(Observer)
观察对象/被观察者(Subject/ Observable)
注意到观察对象(Subject)定义了Attach(Observer), Detach(Observer) 方法【观察者绑定或者解绑到观察对象上】, 但这里隐含的一个问题是,是观察者来调用Attach/Detach 方法, 还是被观察者调用 Attach Detach 方法 ?
稍微思考一下可以得出答案, 是否观察某一个对象应该有观察者来决定, 而不是被观察者决定, 所以Attach/Detach 方法应该由Observer 来调用。
那么紧接着的第二个问题是图例中Observer 并没有 Subject 的引用, 如何调用其Attach/Detach 方法
答案一: Subject 是具有全局可访问性(例如public class 的 public static 成员)
答案二: 在Observer 被构造的时候传入Subject 对象, 自此之后, Observer 一直持有Subject的引用。