读《Head First Design Patterns》(第二章 观察者模式)
本书通过一个网络气象站的实例来阐述观察者模式,首先从定义来看:
The Observer Pattern defines a one-to-many dependency between objects so that when one object changes states,all its dependents are notified and updated automatically.
没错,我觉得这种模式是针对一对多的情况,对象间通信的实现。而且是通过接口实现松耦合。其整个结构和过程可以通过下图一览无余:
将发布者抽象到一个Subject接口,该接口要求实现(registerObserver,removeObserver,notifyObservers)三个方法。而将观察者抽象到Observer接口要求实现(update)方法。在Subject的具体类中通过一个观察者列表来对观察者进行管理(registerObserver,removeObserver),在notifyObservers通过调用观察者的(update)来实现对观察者的通知。
而在观察者的具体类的构造函数中调用发布者的registerObserver来将自己注册到发布者,于是这个一对多的自动同步模式就搭建起来了。
这里后面还提到了java中内建的对观察者模式的支持,让人感觉java不愧是真正的面向对象的语言,考虑得这么周到。主要通过“import java.util.Observable;import java.util.Observer;”来实现的,如下图:
不过正在我为之感叹的时候,本书提醒我们,java的这种内建支持的局限性,就是其中的Observable是一个类而不是接口,所以只有从其继承才能使用。大大限制了其作用。
好了,不早了,这篇总结终于把大致的意思整理出来了,作为日后温故之用。不早了,睡觉了。