观察者模式介绍
在Java中通过Observable类和Observer接口实现了观察者模式。一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时,Observer得到通知,就可以进行相应的工作。
如果画面A是显示数据库里面的数据,而画面B修改了数据库里面的数据,那么这时候画面A就要重新Load。这时候就可以用到观察者模式
以下例子演示Observable和Observer的使用
import java.util.Observable;
import java.util.Observer;
public class MainClass {
public static void main(String[] args) {
BeingWatch beingWatch = new BeingWatch();
//Observable中使用vector来管理加入的Observer对象,
//而且update从最后加入的Observer对象开始
beingWatch.addObserver(new Watcher_1());
beingWatch.addObserver(new Watcher_2());
beingWatch.count(10);
System.out.println("Final line in the main function...");
}
}
class BeingWatch extends Observable {
public void count(int num) {
for (; num >= 0; num--) {
setChanged();
notifyObservers(num);
}
}
}
class Watcher_1 implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println("Watcher_1 count: " + arg);
}
}
class Watcher_2 implements Observer {
@Override
public void update(Observable o, Object arg) {
if (((Integer)arg).intValue() <= 5) {
System.out.println("Watcher_2 count: " + arg);
}
}
}
输出结果————
Watcher_1 count: 10
Watcher_1 count: 9
Watcher_1 count: 8
Watcher_1 count: 7
Watcher_1 count: 6
Watcher_2 count: 5
Watcher_1 count: 5
Watcher_2 count: 4
Watcher_1 count: 4
Watcher_2 count: 3
Watcher_1 count: 3
Watcher_2 count: 2
Watcher_1 count: 2
Watcher_2 count: 1
Watcher_1 count: 1
Watcher_2 count: 0
Watcher_1 count: 0
Final line in the main function...
来源:oschina
链接:https://my.oschina.net/u/2314763/blog/746010