在Java中使用观察者模式时,Observable的方法notifyObservers(Object arg)的问题 在Java中使用观察者模式时,Observable的方法notifyObservers(Object arg)中的arg参数有什么作用?JDK文档中好象什么也没说 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Observable中有两个重载的方法,一个是不带参数的notifyObservers(),一个是带参数的notifyObservers(Object arg)先说那个带参数的notifyObservers(Object arg):这个参数Object arg 其实就是 Observer接口中的update(Observable o, Object arg)方法中的第二个参数 其实就是一个数据对象,也就是通知观察者,改变的数据对象是什么这就是一种PUSH的方法,由主题主动的PUSH需要改变的数据对象给观察者例子:public class WeatherData extends Observable { private float temperature; private float humidity;private float pressure;……..public void measurementsChanged() { setChanged(); notifyObservers(float temperature); }} public class CurrentDisplay extends Observer { private float temperature; private float humidity;private float pressure;……..public void update(Observable obs,Object arg) { if(arg instanceof Float){ temperature = ((Float)arg).floatValue(); } } 而第二种不带参数的notifyObservers(),当调用它的时候, 传递一个null的数据对象给观察者.其实也就是说,观察者需要改变什么数据,是需要观察者自己到主题那里去pull.也就是说,通知你主题发生了变化,但是具体需要什么变化的数据,由你自己决定.public class WeatherData extends Observable { private float temperature; private float humidity;private float pressure;……..public void measurementsChanged() { setChanged(); notifyObservers(); }public float getTemperature(){ Return temperature;} } public class CurrentDisplay extends Observer { private float temperature; private float humidity;private float pressure;……..public void update(Observable obs,Object arg) { if(obs instanceof WeatherData){ WeatherData weatherData = (WeatherData)obs; This.temperature = weatherData.getTemperature(); } }其实最大的区别就是一个是主动push,一个是被动pull 我想问下notifyObservers(参数)中这个参数是什么类型的时候update(Object o,Object arg0)用arg0还得到所要的值或是对这个进行判断 怎样实现多叉树的数据结构? 请高手解答有关于Timer的问题 JAVA下如何判断一个数是不是整数? [求助]文件读取问题 新写的 阿老伯数字到人民币大写的程序 请问如何用JAVA读取C++写的二进制文件 谁有JCreator 2.5 pro的注册码?谢了!愿意用《thinking in java》电子版交换 主程序调用自己编辑的包里的类文件时,在编译主程序时总提示找不到包中的类,有谁知道为什么吗,调用自己定义的包时在编译主程序时应注意 sql语法树构建 如何学好JAVA executeBatch()问题 学习java的30个目标
先说那个带参数的notifyObservers(Object arg):
这个参数Object arg 其实就是 Observer接口中的update(Observable o, Object arg)方法中的第二个参数
其实就是一个数据对象,也就是通知观察者,改变的数据对象是什么
这就是一种PUSH的方法,由主题主动的PUSH需要改变的数据对象给观察者
例子:public class WeatherData extends Observable {
private float temperature;
private float humidity;
private float pressure;……..
public void measurementsChanged() {
setChanged();
notifyObservers(float temperature);
}} public class CurrentDisplay extends Observer {
private float temperature;
private float humidity;
private float pressure;……..
public void update(Observable obs,Object arg) {
if(arg instanceof Float){
temperature = ((Float)arg).floatValue();
}
}
而第二种不带参数的notifyObservers(),当调用它的时候, 传递一个null的数据对象给观察者.
其实也就是说,观察者需要改变什么数据,是需要观察者自己到主题那里去pull.
也就是说,通知你主题发生了变化,但是具体需要什么变化的数据,由你自己决定.
public class WeatherData extends Observable {
private float temperature;
private float humidity;
private float pressure;……..
public void measurementsChanged() {
setChanged();
notifyObservers();
}
public float getTemperature(){
Return temperature;
}
} public class CurrentDisplay extends Observer {
private float temperature;
private float humidity;
private float pressure;……..
public void update(Observable obs,Object arg) {
if(obs instanceof WeatherData){
WeatherData weatherData = (WeatherData)obs;
This.temperature = weatherData.getTemperature();
}
}
其实最大的区别就是一个是主动push,一个是被动pull