观察者模式:一对多的关系模式,一为状态可以改变的对象,多为依赖该对象的众多观察者,jdk中已经有该模式的API和类 java.util.Observable和java.util.Observer。可观察者,即那个一,是extends了java.util.Observable的扩展类;观察者,即Observer,必须实现java.util.Observer接口中的update()方法。当可观察者的状态改变时,可以通知到多个依赖其的观察者,如下为一个小小栗子,当可观察者的温度temp改变时,观察者随时都能感受并做出相应反应:
package jsoup;
import java.util.Observable;
import java.util.Random;
//可观察者
public class ObserverPattern extends Observable {
public void setChange(int temp){
setChanged();
notifyObservers(temp); //当状态temp温度改变时,通知所有注册在该对象中的观察者,并调用观察者的update()方法,可以进Observable看源码
}
//测试代码
public static void main(String[] args){
ObserverPattern subject = new ObserverPattern();
Observer observer = new Observer(subject);
//当可观察者状态改变时,依赖其的观察者可以随时感受到状态的改变并做出相应的反应
Random random = new Random(47);
int count = 0;
while(count<10){
int r = random.nextInt(100);
subject.setChange(r);
count++;
}
}
}
//观察者
class Observer implements java.util.Observer {
Observable subject;
int temp;
public Observer(Observable o) {
this.subject = o;
subject.addObserver(this); //将实例出的观察者注册到可观察者中
}
@Override
public void update(Observable o, Object arg) { //重写Observer API中的update()
temp = (int) arg;
disPlay();
}
private void disPlay() {
System.out.println("temp changed, temp=" + temp);
}
}
还没有评论,来说两句吧...