
上QQ阅读APP看书,第一时间看更新
2.2 观察者模式
在面向对象的语言中,为了在上述的第一种情况中(不确定何时要从被调用方运行调用方的逻辑)实现控制反转,常常会应用观察者模式。该模式的含义是:一个对象的内部状态发生变化时,通知另一些感兴趣的对象。前者称为主体,后者称为观察者。具体到代码上,主体内部保持一个观察者的列表,程序通过调用主体的addObserver或deleteObserver方法向其增加或删除观察者,当主体的内部逻辑引发状态变化时,调用自身的notifyObservers方法,该方法遍历观察者列表,分别调用它们的notify方法,将主体作为参数传递给观察者,观察者就可以依据主体的状态变化作出相应的动作。两者的关系如图2.1所示。
与事件编程做对比,主体可以被看作事件发布者,观察者是收听者,notify方法是具体的事件处理程序,主体作为参数被传递给notify方法所以又是事件信息。将观察者模式以事件编程的语言来改写,就会得到类似下面的代码。

图2.1 观察者模式



