观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
发布—订阅
在首篇导读中介绍了设计模式的分类,而观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。
观察者模式有一个别名叫“订阅—发布模式”。报纸大家都订过吧,当你订阅了一份报纸,每天都会有一份最新的报纸送到你手上,有多少人订阅报纸,报社就会发多少份报纸,这是典型的订阅—发布模式,报社和订报纸的客户就是上面文章开头所说的“一对多”的依赖关系。
观察者模式类图:
其实观察者模式也很简单,从上图可以看出观察者模式就两种角色,一是观察者,二是被观察者(主题),也可以认为是订阅者和发布者。
从逻辑上来说,观察者模式就是:当被观察者的状态改变了,就通知观察者,怎么通知呢?从类图中可以看到,被观察者保存了一份所有观察者的列表,只要调用观察者对象的 update() 方法即可。
用发布—订阅报纸的实例来说的话,就是客户们向报社订阅报纸,报社要保存一份所有客户的地址名单,然后有新报纸来了,就按照这个名单一个个派送报纸。
具体的代码实例如下。
观察者(客户):