设计模式之观察者模式

来源:互联网 发布:微信js获取地理位置 编辑:程序博客网 时间:2024/05/21 01:48
观察者模式:一对多的关系模式,一为状态可以改变的对象,多为依赖该对象的众多观察者,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);    }}
0 0
原创粉丝点击