定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。
优点:当两个对象之间松耦合,他们依然可以交互,但是不太清楚彼此的细节。观察者模式提供了一种对象设计,让主题和观察者之间松耦合。
支持广播通信,被观察者会向所有的登记过的观察者发出通知。
缺点:如果一个被观察者对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间
结构:
目标(Subject): 目标知道它的观察者。可以有任意多个观察者观察同一个目标。 提供注册和删除观察者对象的接口。
具体目标(ConcreteSubject): 将有关状态存入各ConcreteObserver对象。
观察者(Observer): 为那些在目标发生改变时需获得通知的对象定义一个更新接口。当它的状态发生改变时, 向它的各个观察者发出通知。
具体观察者(ConcreteObserver): 维护一个指向ConcreteSubject对象的引用。存储有关状态,这些状态应与目标的状态保持一致。实现O b s e r v e r的更新接口以使自身状态与目标的状态保持一致。
Observer模式的Java实现
Java的API中已经为我们提供了Observer模式的实现。具体由java.util.Observable类(主题)和java.util.Observer接口(观察者)完成。
前者有两个重要的方法:
·setChanged:设置内部状态为已改变
·notifyObservers(Object obj):通知观察者所发生的改变,参数obj是一些改变的信息
后者有一个核心方法:
·update(Object obj):相应被观察者的改变,其中obj就是被观察者传递过来的信息,该方法会在notifyObservers被调用时自动调用。
设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
http://blog.csdn.net/hguisu/article/details/7556625
观察者模式(二)--《Head First DesignPattern》