第62章

bookmark

小A:“那它的組成部分哩?是不是就是有觀察者和被觀察者的就是屬於觀察者模式?”

大B:“不是。1、抽象目標角色:目標角色知道它的觀察者,可以有任意多個觀察者觀察同一個目標。並且提供註冊和刪除觀察者對象的接口。目標角色往往由抽象類或者接口來實現。2、抽象觀察者角色:爲那些在目標發生改變時需要獲得通知的對象定義一個更新接口。抽象觀察者角色主要由抽象類或者接口來實現。3、具體目標角色:將有關狀態存入各個具體觀察者角色對象。當它的狀態發生改變時,向它的各個觀察者發出通知。4、具體觀察者角色:存儲有關狀態,這些狀態應與目標的狀態保持一致。實現觀察者角色的更新接口以使自身狀態與目標的狀態保持一致。在這個角色內也可以維護一個指向具體目標角色對象的引用。”

大B:“用一個實際的例子來說明:日常生活中說起觀察者,最常見的例子可能就是天氣預報,在這裡我們的觀察對象是地球,而我們是通過發射氣象衛星這個觀察者來檢測地球氣象變化的。”

所以這個例子中涉及三個對象:

地球(Earth):被觀察對象

氣象衛星(Satellite):觀察者

氣象局(WeatherService):客戶端調用

被觀察對象:地球(Earth)

importjava.util.Observable;

/***//**

*被觀察對象:地球

*

*@version1.0

*/

publicclassEarthextendsObservable{

privateStringweather=“晴朗”;

/***//**

*@returnReturnstheweather.

*/

publicStringgetWeather(){

returnweather;

}

/***//**

*@paramweather

*Theweathertoset.

*/

publicvoidsetWeather(Stringweather){

this.weather=weather;

//設置變化點

setChanged();

notifyObservers(weather);

}

}

[注意]在需檢測的對象前需要設置變化點setChanged()和通知觀察者notifyObservers(),這兩個函數是由Observable類實現的,封裝了觀察者模式實現的細節。

觀察者:氣象衛星(Satellite)

importjava.util.Observable;

importjava.util.Observer;

/***//**

*觀察對象:氣象衛星

*

*@version1.0

*/

publicclassSatelliteimplementsObserver{

privateStringweather;

publicvoidupdate(Observableobj,Objectarg){

weather=(String)arg;

//捕獲天氣變化情況,反饋給檢測者

System.out.println(近期天氣變化:+weather);

}

}

客戶端調用:氣象局(WeatherService)

/***//**

*客戶端調用:天氣預報

*

*@version1.0

*/

publicclassWeatherService{

/***//**

*@paramargs

*/

publicstaticvoidmain(String[]args){

Earthearth=newEarth();

Satellitesatellite=newSatellite();

//發射氣象衛星

earth.addObserver(satellite);

System.out.println(天氣預報:);

System.out.println(“——”);

earth.setWeather(“颱風‘珍珠’逼近”);

earth.setWeather(“大到暴雨”);

earth.setWeather(“天氣炎熱”);

}

}

[運行結果]

天氣預報:

——

近期天氣變化:颱風‘珍珠’逼近

近期天氣變化:大到暴雨

近期天氣變化:天氣炎熱

第134章第168章第7章第221章第68章第21章第210章第132章第37章第210章第173章第17章第228章第130章第168章第94章第47章第106章第211章第58章第124章第33章第59章第40章第167章第224章第150章第96章第74章第127章第168章第32章第109章第162章第10章第91章第205章第82章第149章第43章第201章第184章第111章第150章第144章第172章第178章第87章第172章第55章第45章第115章第87章第10章第149章第96章第144章第188章第53章第210章第171章第20章第63章第140章第10章第208章第160章第79章第190章第69章第6章第155章第85章第112章第10章第120章第95章第203章第58章第101章第12章第167章第131章第145章第176章第82章第47章第106章第99章第193章第114章第107章第193章第90章第226章第119章第114章第79章第116章
第134章第168章第7章第221章第68章第21章第210章第132章第37章第210章第173章第17章第228章第130章第168章第94章第47章第106章第211章第58章第124章第33章第59章第40章第167章第224章第150章第96章第74章第127章第168章第32章第109章第162章第10章第91章第205章第82章第149章第43章第201章第184章第111章第150章第144章第172章第178章第87章第172章第55章第45章第115章第87章第10章第149章第96章第144章第188章第53章第210章第171章第20章第63章第140章第10章第208章第160章第79章第190章第69章第6章第155章第85章第112章第10章第120章第95章第203章第58章第101章第12章第167章第131章第145章第176章第82章第47章第106章第99章第193章第114章第107章第193章第90章第226章第119章第114章第79章第116章