参考书——《HeadFirst设计模式》
主题(subject)+观察者(observer)=观察者模式——解释:主题对象管理某些数据,观察者已经订阅主题。当主题内的数据改变,就会通知观察者。
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
在最基础的观察者模式中,包括以下四个角色:
- 被观察者:有一个用来存放观察者对象的容器,这个容器是被观察者类的核心,另外还有三个方法:addObserver方法是向这个容器中添加观察者对象;deleteObserver方法是从容器中移除观察者对象;notifyObserver方法是依次调用观察者对象的对应方法。这个角色可以是接口,也可以是抽象类或者具体的类。
- 观察者:观察者角色一般是一个接口,它只有一个update方法,在被观察者状态发生变化时,这个方法就会被触发调用。
- 具体的被观察者:使用这个角色是为了便于扩展,可以在此角色中定义具体的业务逻辑。
- 具体的观察者:观察者接口的具体实现,在这个角色中,将定义被观察者对象状态发生变化时所要处理的逻辑。
======================================================================================================
这个设计模式不难,以下是关于观察者模式的一些周边讨论~
1.在设计具体观察者时
public class ConcreteObserver implements ObserverI {
private ConcreteObservable observable;
public ConcreteObserver(ConcreteObservable observable){
this.observable = observable;
observable.addObserver(this);
}
为什么要保存ConcreteObservable的引用呢?解释:这样做的是为了当想要不再是观察者时,如果已经有了对ConcreteObservable的引用会比较方便。P.s:这里也可以理解为是一种回调。详细参考:http://hellosure.iteye.com/blog/1130176
2.典型的观察者模式,被观察者者是将信息“推”送给观察者的。这种方式有好有坏,可以根据具体情况,让被观察者提供一些公开的getter方法,让观察者“拉”走一些自己所需的信息。
3.还可以使用java内置的观察者模式 http://www.oschina.net/code/explore/jdk16/java/util/Observable.java