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 update(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( " 天氣炎熱 " );
}
}
[運行結果]
天氣預報:
------------
近期天氣變化:颱風‘珍珠’逼近
近期天氣變化:大到暴雨
近期天氣變化:天氣炎熱
註:以上內容來自網路,本人不承擔連帶責任
本文轉自:http://www.javatx.cn/clubPage.jsp?ccStyle=0&tID=632&ccID=14