14.2.2 观察者模式
在这个场景中,股票和投资者之间的关系是1:N的关系,当价格发生一定变化时,股票以广播的方式通知投资者,这正是观察者模式。GoF给出的定义如下。
Define a onetomany dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
定义了对象之间的“一对多”的依赖关系,这样,当一个对象的状态发生变化时,所有依赖于这个对象的相关对象都被通知并自动更新。
我们把被观察的对象也叫做主题(Subject),这里的主题即是Stock类,StockBuyer便是观察者接口。当有多个主题时,你可以抽象出一个Subject接口,这样,就可以独立地改变主题和观察者而不会相互影响。
我们上述实现的模式是push方式的观察者模式,即股票把观察者需要的所有信息都推给了它们,这里是指把股票价格推给了目标。
我们还有一种方式,我们称之为pull方式,即股票在通知观察者时并不传递股票信息,而由观察者显式地查询股票信息。
使用前者时,如果观察者需要获得更多的信息,可能导致观察者接口不能重用;使用后者时,观察者可能不容易知道哪些信息发生了改变。