java的Observable类中,notifyObservers(Object arg)和notifyObservers()的区别

来源:互联网 发布:淘宝侵权怎么处理 编辑:程序博客网 时间:2024/06/05 19:07
Observable中有两个重载的方法,一个是不带参数的notifyObservers(),一个是带参数的notifyObservers(Object arg)
先说那个带参数的notifyObservers(Object arg):
这个参数Object arg 其实就是 Observer接口中的update(Observable o, Object arg)方法中的第二个参数 
其实就是一个数据对象,也就是通知观察者,改变的数据对象是什么
这就是一种PUSH的方法,由主题主动的PUSH需要改变的数据对象给观察者
例子:
Java code
?
1
2
3
4
5
6
7
8
9
10
public class WeatherData extends Observable {
         private float temperature;    
private float humidity;
private float pressure;
 
……..
public void measurementsChanged() {
        setChanged();
        notifyObservers(float temperature);
    }}

 
Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
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.
也就是说,通知你主题发生了变化,但是具体需要什么变化的数据,由你自己决定.

Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class WeatherData extends Observable {
         private float temperature;    
private float humidity;
private float pressure;
 
……..
public void measurementsChanged() {
        setChanged();
        notifyObservers();
    }
public float getTemperature(){
    Return temperature;
}

 
Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
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
   原文链接:http://bbs.csdn.net/topics/190140872

0 0
原创粉丝点击