一、使用场景: 适用于当一个对象的状态发生变化时主动去通知另一个对象的场景。
二、使用步骤:
1.定义被观察者类,该类继承java.util.Observable,并在类中提供一个给外部进行调用的方法,在该方法中需要进行两部操作:
setChanged();
notifyObservers(xxx);
其中第二个方法调用中传入的值就是观察者收到的值。
示例类如下:
package cn.edu.tju.app;
import java.util.Observable;
public class PriceObservable extends Observable {
private double price;
PriceObservable(double price){
this.price=price;
}
public void changePrice(double price){
this.price=price;
setChanged();
notifyObservers(price);
}
}
2.定义观察者类,该类要实现import java.util.Observer接口,因此要实现update方法,该方法会在被观察对象的值发生变化时被调用,实例代码如下,
package cn.edu.tju.app;
import java.util.Observable;
import java.util.Observer;
public class PriceObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println(o+ " changed to "+arg);
}
}
3.定义主类,分别定义被观察者对象和观察者对象,然后通过被观察者对象的addObserver方法讲观察者对象链接到被观察者对象,最后调用被观察者对象的改变属性的方法,所有链接的观察者对象的update方法都会被调用
实例类如下
package cn.edu.tju.app;
public class ObserveTest01 {
public static void main(String[] args) {
//定义被观察者
PriceObservable priceObservable=new PriceObservable(100);
//定义两个观察者
PriceObserver priceObserver01=new PriceObserver();
PriceObserver priceObserver02=new PriceObserver();
//把观察者假如被观察者的观察列表
priceObservable.addObserver(priceObserver01);
priceObservable.addObserver(priceObserver02);
//调用被观察者的接口,使被观察者属性发生变化
priceObservable.changePrice(125.6);
}
}
运行结果



