1.什么是观察者模式
观察者模式是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,
并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式
通常被用来实时事件处理系统。
2.java如何实现观察者模式
java通过 类java.util.Observable 和 接口 java.util.Observer 实现该模式。(不得不吐槽一下,sun公司真的土掉渣了,
类的名字以able结束,接口反而不用) 被观察者继承Observable 观察者实现Observer接口。下面看例子:
//被观察者
public class TObservable extends Observable {
private int data;
public void setDate(int data){
this.data =data;
this.setChanged();
this.notifyObservers();
}
public Integer getData(){
return data;
}
}
/** * 观察者 * @author */ public class TObserver implements java.util.Observer{ //观察者实现 update方法 @Override public void update(Observable o, Object arg) { TObservable observable = (TObservable) o; System.out.println("TObservable.date is exchange:"+observable.getData()); } }
//测试 public static void main(String[] args) { //实例化被观察者 TObservable impl = new TObservable(); //添加观察者,可以添加多个观察者 impl.addObserver(new TObserver()); //被观察者发生改变 impl.setDate(12); impl.setDate(13); }
3.使用Observer和Observable 观察者与被观察者是同一对象
//example public class TOObs extends Observable implements Observer { private int data; public void setData(int data){ this.data =data; this.setChanged(); this.notifyObservers(); } public Integer getData(){ return this.data; } @Override public void update(Observable o, Object arg) { TOObs toobs = (TOObs)o; System.out.println("exchanges"+toobs.getData()); } //测试
TOObs toobs = new TOObs(); toobs.addObserver(toobs); toobs.setData(11); toobs.setData(11);