观察者模式简介:
定义:定义对象间的一对多的依赖关系,当一个对象的状态改变时,所有依赖于它的对象都得到通知并被自动更新。
原理:由四部分组成抽象目标类,具体目标类,抽象观察者类,具体观察者类
Subject .java
ConcreteSubject .java
Observer.java
ConcreteObserver.java
使用java.util.Observer接口和java.util.Observable类实现观察者模式:
观察者实现Observer接口,并重写其中的update方法,供被观察者状态改变时调用。
被观察者继承Observable类,在Observable类中有增加,删除观察者类的方法,还有通知所有观察者都update的方法。状态改变时,先setChanged,再notifyObservers。
Observer接口源码:
Observable类源码:
使用时机:
1. 当一个对象的改变需要同时改变其他对象,而且它不知道具体有多少对象有待改变时, 应该考虑使用观察者模式;
2. 一个抽象模型有两个方面,其中一个方面依赖于另一方面, 这时用观察者模式可以将这两者封闭在独立的对象中使它们各自独立地改变和复用;
3. 观察者模式所做的工作其实就是在解除耦合。让耦合的双方都依赖于抽象,而不是依赖于具体,从而使得各自的变化都不会影响另一边的变化。
应用:
JUnit中测试结果的输出(待续)
IOC与观察者模式结合:http://www.theserverside.com/tt/articles/article.tss?l=SpringLoadedObserverPattern