您的位置:首页 > 编程语言 > Java开发

java 观察者模式

2017-07-17 15:00 190 查看
自定义观察者要实现java.util.Observer接口;

自定义被观察者要继承java.util.Observable基类;

观察者

/**
* 观察者
* 实现java.util.Observer接口
*/
public class NumObserver implements Observer{
/**
* This method is called whenever the observed object is changed. An
* application calls an <tt>Observable</tt> object's
* <code>notifyObservers</code> method to have all the object's
* observers notified of the change.
*
* @param o   the observable object.
* @param arg an argument passed to the <code>notifyObservers</code>
*/
@Override
public void update(Observable o, Object arg) {
NumObservable numObserver=(NumObservable) o;
System.out.println("data has changed to:"+((NumObservable) o).getData());
}
}


被观察者

/**
* 被观察者
* - 继承java.util.Observable
*
* - 被观察者手动调用setChanged()和notifyObservers()方法后,就会自动通知
*   被观察者的观察者列表中的所有观察者执行update()方法
*
* - 只有先调用setChanged()之后,notifyObservers()方法才会去调用update()方法
*/
public class NumObservable extends java.util.Observable{
private int data;

public void setData(int data){
this.data=data;
this.setChanged();
//通知观察者
this.notifyObservers(data);
}
public int getData(){
return this.data;
}
public String toString(){
return String.valueOf(this.data);
}
}


测试

**
* 测试类
*/
public class Test_ {
@Test
public void testObservableModel(){
//被观察者
NumObservable numObservable=new NumObservable();
//观察者
NumObserver observer=new NumObserver();
//将观察者添加到被观察者的观察者列表中
numObservable.addObserver(observer);
//改变数值
numObservable.setData(100);
numObservable.setData(200);
numObservable.setData(300);
}
}


结果

/home/zhangjian/tools/jdk/bin/java

data has changed to:100

data has changed to:200

data has changed to:300

Process finished with exit code 0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息