jdk自带的观察者模式

jdk自带观察者模式的实现,java.util.Observable,java.util.Observer

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.kevinlsui.observer.jdk;
import java.util.Observable;
/**
* 天气预报,被观察者
*/
public class WeatherData extends Observable{
private int low;
private int hight;
private String weather;
public int getLow() {
return low;
}
public int getHight() {
return hight;
}
public String getWeather() {
return weather;
}
// 天气信息发布,需要推送给观察者
public void setData(int low,int hight,String weather){
this.low = low;
this.hight = hight;
this.weather = weather;
setChanged();//查看源码,只有更改了该属性,才能进行发布。
//1.消息推过去
notifyObservers(new Object[]{getLow(),getHight(),getWeather()});
//2.对象传过去
/*notifyObservers();*/
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.kevinlsui.observer.jdk;
import java.util.Observable;
import java.util.Observer;
/**
* 观察类,要及时获取天气信息
*/
public class Ipad implements Observer{
private Observable sub;
public Ipad(Observable subject){
this.sub = subject;
// 添加到被观察者的推送对象列表
subject.addObserver(this);;
}
public void cancle(){
// 取消关注
sub.deleteObserver(this);;
}
// 坐等天气消息
@Override
public void update(Observable o, Object arg) {
if(arg!=null){
Object[] obj = (Object[]) arg;
System.out.println("Ipd222....low:"+obj[0]+";hight:"+obj[1]+";weather:"+obj[2]);
}else{
WeatherData we = (WeatherData) o;
System.out.println("Ipd....low:"+we.getLow()+";hight:"+we.getHight()+";weather:"+we.getWeather());
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.kevinlsui.observer.jdk;
/**
* JDK自带的观察者模式测试
* @author admin
*
*/
public class Test {
public static void main(String[] args) {
System.out.println("JDK观察者模式.........");
WeatherData we = new WeatherData();
Ipad ipad = new Ipad(we);
we.setData(1, 12, "晴天");
ipad.cancle();
we.setData(5, 18, "大晴天");
}
}
文章目录
|