观察者模式
观察者模式(别名Publish-Subscribe):定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
生活中的实例:
订阅报纸杂志
1. 报社的业务就是出版报纸。
2. 向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸。
3. 当你不想再看报纸的时候,取消订阅,他们就不会再送新报纸来。
4. 只要报社还在运营,就会一直有人(或单位)向他们订阅报纸或取消订阅报纸。
要点:
1. 主题用一个共同的接口来通知观察者(notifyObservers)
2. 主题和观察者之间松耦合,主题不知道观察者的细节,只知道观察者实现了观察者接口(update)
3. 推,拉模式各有千秋,推的实现要简单一些
实现:
1. Subject可以加将Observer对象的引用保存在一个聚集中,每个Subject可以有任意个Observer。
2. 提供注册和删除Observer对象的接口。
public interface Subject
{
}
Observer:
1. 为那些在Subject发生改变时需获得通知的对象定义一个更新接口。
public interface Observer
{
}
Concrete Subject:
1. 将有关状态存入各 ConcreteObserver对象,当它的状态发生改变时,向它的各个观察者发出通知。
public class ConcreteSubject implements Subject
{