本文共 1940 字,大约阅读时间需要 6 分钟。
具体思路参考上一篇博客
import java.util.Observable;
//继承observable,查看源码可以发现,observable已经把注册,添加,删除都做好了, //我们不在需要做 public class WeatherData extends Observable{ private float temperature; private float humidity; private float pressure; public WeatherData(){ } //主题值改变时调用 public void measurementsChanged(){ setChanged();//设置当前改变量为true ,这样才可以进行 notifyObservers(); //源码:((Observer)arrLocal[i]).update(this, arg);表示向观察者穿值 } //和原来的一样,改变主题的值,引起观察者收到信息 public void setMeasurements(float temperature,float humidity,float pressure){ this.temperature=temperature; this.humidity=humidity; this.pressure=pressure; measurementsChanged(); } public float getTemperature() { return temperature; } public float getHumidity() { return humidity; } public float getPressure() { return pressure; } } public class CurrentConditionsDisplay implements Observer,DisplayElement{ Observable observable; private float temperature; private float humidity; //传入主题引用,为了把当前观察者放入主题的list中 public CurrentConditionsDisplay(Observable observable){ this.observable=observable; observable.addObserver(this); } //更新后执行,显示,供用户观看 @Override public void display() { // TODO Auto-generated method stub System.out.println("Current conditions: "+temperature +"F degrees and "+humidity+"% humidity"); } //这个函数供主题调用 @Override public void update(Observable o, Object arg) { // TODO Auto-generated method stub if(o instanceof WeatherData){ WeatherData weatherData=(WeatherData)o; this.temperature=weatherData.getTemperature(); this.humidity=weatherData.getHumidity(); display(); } } } 测试:public static void main(String[] args) {
// TODO Auto-generated method stub WeatherData weatherData=new WeatherData(); CurrentConditionsDisplay currentDisplay= new CurrentConditionsDisplay(weatherData); CurrentConditionsDisplay currentDisplay1= new CurrentConditionsDisplay(weatherData); weatherData.setMeasurements(80, 65,30.5f); weatherData.setMeasurements(82, 70,29.2f); weatherData.setMeasurements(78, 90,29.2f);转载地址:http://lvjqi.baihongyu.com/