Java中的观察者模式(O erver)学习

文章作者 100test 发表时间 2008:04:02 14:23:56
来源 100Test.Com百考试题网


Java作为一种面向对象的开发语言,对实现设计模式提供了良好的支持,并且提供了许多默认的实现,比如:通过Java中的Observable类和Observer接口可以方便的实现观察者模式。

下面我们就用一个实际的例子来说明:日常生活中说起观察者,最常见的例子可能就是天气预报,在这里我们的观察对象是地球,而我们是通过发射气象卫星这个观察者来检测地球气象变化的。

所以这个例子中涉及三个对象:
地球 (Earth): 被观察对象
气象卫星(Satellite): 观察者
气象局(WeatherService): 客户端调用

被观察对象:地球 (Earth)


import java.util.Observable.

/** */ /**
* 被观察对象:地球
*
* @author zjun
* @version 1.0 create on 2006-5-18 9:42:45
*/
public class Earth extends Observable {
private String weather = " 晴朗 " .

/** */ /**
* @return Returns the weather.
*/
public String getWeather() {
return weather.
}

/** */ /**
* @param weather
* The weather to set.
*/
public void setWeather(String weather) {
this .weather = weather.
// 设置变化点
setChanged().
notifyObservers(weather).
}
}
[注意] 在需检测的对象前需要设置变化点setChanged()和通知观察者notifyObservers(),这两个函数是由Observable类实现的,封装了观察者模式实现的细节。

观察者:气象卫星(Satellite)

import java.util.Observable.
import java.util.Observer.

/** */ /**
* 观察对象:气象卫星
*
* @author zjun
* @version 1.0 create on 2006-5-18 9:46:30
*/
public class Satellite implements Observer {
private String weather.

public void 0update(Observable obj, Object arg) {
weather = (String) arg.
// 捕获天气变化情况,反馈给检测者
System.out.println( " 近期天气变化: " weather).
}
}
客户端调用:气象局(WeatherService)

/** */ /**
* 客户端调用:天气预报
*
* @author zjun
* @version 1.0 create on 2006-5-18 9:57:19
*/
public class WeatherService {

/** */ /**
* @param args
*/
public static void main(String[] args) {
Earth earth = new Earth().

Satellite satellite = new Satellite().
// 发射气象卫星
earth.addObserver(satellite).

System.out.println( " 天气预报: " ).
System.out.println( " ------------ " ).
earth.setWeather( " 台风‘珍珠’逼近 " ).
earth.setWeather( " 大到暴雨 " ).
earth.setWeather( " 天气炎热 " ).
}
}

[运行结果]

天气预报:
------------
近期天气变化:台风‘珍珠’逼近
近期天气变化:大到暴雨
近期天气变化:天气炎热

相关文章


Oracle中限制返回结果集的行数
获取或记录Oracle语句的执行时间
解决CPU高度消耗(100%)的数据库问题
in和exists的区别与执行效率问题解析
Java中的观察者模式(O erver)学习
Java中重载和重写的区别
使用ecli e调用.netwe ervice
Java编程实现列表框元素动态变化
“J2EE服务支撑平台(OTP)”解决方案
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛