日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java观察者_Java中的观察者模式

發(fā)布時間:2025/3/15 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java观察者_Java中的观察者模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

讓一個類能夠被觀察,則該類需要繼承java.util.Observable類。

要讓一個類成為觀察者,則該類需要實現(xiàn)java.util.Observable接口。

讓觀察者和被觀察者建立聯(lián)系通過Observable的addObserver(Object obj)方法。

讓被觀察者通知觀察者,通過Observable類中的setChanged()和notifyObservers(Object obj)方法。

下面的例子定義了一個售房中心類和一個賣家類。售房中心為被觀察者,買房者為觀察者。售房中心房價發(fā)生變化,則將相應(yīng)的信息通知買房者。

代碼如下:

import java.util.*;class HouseSellCenter extendsObservable

{publicString name;public floatprice;public HouseSellCenter(String name, floatprice)

{this.name =name;this.price =price;

}public void changePrice(floatprice)

{this.price =price;super.setChanged();super.notifyObservers(price);

}publicString toString()

{return "name:" + this.name + " price:" +this.price;

}

}class Buyer implementsObserver

{publicString name;publicBuyer(String name)

{this.name =name;

}public voidupdate(Observable o, Object arg)

{

HouseSellCenter hsc=(HouseSellCenter)o;

System.out.println(this.name+"觀察到:"+hsc.name+"房價變?yōu)?" + arg + "萬");

}

}classHello

{public static voidmain(String[] args)

{

HouseSellCenter hsc= new HouseSellCenter("金悅城",1.3f);

Buyer buyer1= new Buyer("金旭地產(chǎn)");

Buyer buyer2= new Buyer("龍城中介");

Buyer buyer3= new Buyer("祥龍置業(yè)");

hsc.addObserver(buyer1);

hsc.addObserver(buyer2);

hsc.addObserver(buyer3);

System.out.println("============");

hsc.changePrice(1.5f);

System.out.println("============");

sleep(3000);

System.out.println("============");

hsc.changePrice(1.2f);

System.out.println("============");

}public static void sleep(inttimeSpan)

{try{

Thread.sleep(timeSpan);

}catch(Exception e)

{

System.out.println(e);

}

}

}

輸出結(jié)果:

============祥龍置業(yè)觀察到:金悅城房價變?yōu)?1.5萬

龍城中介觀察到:金悅城房價變?yōu)?1.5萬

金旭地產(chǎn)觀察到:金悅城房價變?yōu)?1.5萬============

============祥龍置業(yè)觀察到:金悅城房價變?yōu)?1.2萬

龍城中介觀察到:金悅城房價變?yōu)?1.2萬

金旭地產(chǎn)觀察到:金悅城房價變?yōu)?1.2萬============

上面的代碼是利用了Java對觀察者模式的支持。下面用另一個例子說明觀察者模式運行規(guī)則。

Observerable接口(定義被觀察者的規(guī)范):

public interfaceObserverable

{voidaddObserver(ObserverBehavior newObserver);voidremoveObserver(ObserverBehavior observerToBeRemoved);voidnotifyAllObservers();

}

ObserverBehavior接口(定義觀察者的規(guī)范):

public interfaceObserverBehavior

{void update(float temperature, float humidity, floatpressure);

}

WeatherData類實現(xiàn)Observerable接口,其是真實的被觀察者類:

importjava.util.List;importjava.util.ArrayList;public class WeatherData implementsObserverable

{private ListobserverList;private floattemperature;private floathumidity;private floatpressure;publicWeatherData()

{this.observerList = new ArrayList();

}

@Overridepublic voidaddObserver(ObserverBehavior newObserver)

{//TODO Auto-generated method stub

this.observerList.add(newObserver);

}

@Overridepublic voidnotifyAllObservers()

{//TODO Auto-generated method stub

for(ObserverBehavior observer : this.observerList)

{

observer.update(this.temperature, this.humidity, this.pressure);

}

}

@Overridepublic voidremoveObserver(ObserverBehavior observerToBeRemoved)

{//TODO Auto-generated method stub

this.observerList.remove(observerToBeRemoved);

}public void weatherChanged(float temperature, float humidity, floatpressure)

{this.temperature =temperature;this.humidity =humidity;this.pressure =pressure;this.notifyAllObservers();

}

}

MobileDevices實現(xiàn)ObserverBehavior類(真正的觀察者):

public class MobileDevices implementsObserverBehavior

{privateString name;publicMobileDevices(String name)

{this.name =name;

}

@Overridepublic void update(float temperature, float humidity, floatpressure)

{//TODO Auto-generated method stub

System.out.println(this.name + "觀察到當(dāng)前 --> 溫度:" + temperature + " 濕度:" + humidity + " 氣壓:" +pressure);

}

@Overridepublic booleanequals(Object obj)

{if(this ==obj)return true;if(!(obj instanceofMobileDevices))return false;

MobileDevices otherOne=(MobileDevices)obj;if(this.name.equals(otherOne.name))return true;else

return false;

}

}

WhiteBoard實現(xiàn)了ObserverBehavior類(另一個真正的觀察者):

public class WhiteBoard implementsObserverBehavior

{privateString name;publicWhiteBoard(String name)

{this.name =name;

}

@Overridepublic void update(float temperature, float humidity, floatpressure)

{//TODO Auto-generated method stub

System.out.println(this.name + "觀察到當(dāng)前 --> 溫度:" + temperature + " 濕度:" + humidity + " 氣壓:" +pressure);

}

}

主方法測試:

public classTester

{/***@paramargs*/

public static voidmain(String[] args)

{//TODO Auto-generated method stub

WeatherData subject = newWeatherData();

WhiteBoard wb= new WhiteBoard("中央廣場白板");

MobileDevices iphone= new MobileDevices("iphone手機");

MobileDevices android= new MobileDevices("安卓手機");

subject.addObserver(wb);

subject.addObserver(iphone);

subject.weatherChanged(12, 23, 33);

subject.removeObserver(new MobileDevices("iphone手機"));

subject.addObserver(android);

subject.weatherChanged(22, 43, 25);

}

}

輸出結(jié)果:

中央廣場白板觀察到當(dāng)前 --> 溫度:12.0 濕度:23.0 氣壓:33.0

iphone手機觀察到當(dāng)前 --> 溫度:12.0 濕度:23.0 氣壓:33.0

中央廣場白板觀察到當(dāng)前 --> 溫度:22.0 濕度:43.0 氣壓:25.0

安卓手機觀察到當(dāng)前 --> 溫度:22.0 濕度:43.0 氣壓:25.0

總結(jié):

被觀察者應(yīng)該具備以下功能:

1) 能增加一個觀察者?addObserver

2)能移除一個觀察者?removeObserver

3)在數(shù)據(jù)改變的時候能將相應(yīng)的信息通知給被觀察者?notifyAllObservers

觀察者應(yīng)具備以下功能:

1)?update方法用于觀察者接收被觀察者的推送信息

總結(jié)

以上是生活随笔為你收集整理的java观察者_Java中的观察者模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本成人毛片 | 精品欧美一区二区三区免费观看 | 一区二区三区四区日韩 | 亚洲涩网| 色xxxxx | 人人爽爽爽 | 波多野结衣亚洲一区二区 | 一区二区三区四区av | 日本免费黄色网址 | 国产传媒av | 色老头影视 | 国产精品视频一区二区在线观看 | 91av久久| 日韩porn| 久久国产精品久久国产精品 | 97色在线视频 | 日本一区二区三区免费在线观看 | 视频一区中文字幕 | 欧美456 | 国产精品123区| 午夜爱爱免费视频 | 免费日韩一区二区 | 精品在线观看一区 | 男女草逼 | 精品久久久噜噜噜久久久 | 九色porny自拍视频在线播放 | av字幕在线 | 国产精品一区二区视频 | 国产男男网站 | 国产女同视频 | 色吟av| 免费不卡的av | www.尤物 | 成年人免费网站在线观看 | 香蕉传媒| 欧美视频日韩 | 亚洲天堂2014 | 成人av无码一区二区三区 | 91久久 | 午夜免费 | 欧美一级黄色片在线观看 | 亚洲欧美日韩精品久久 | 铠甲勇士猎铠 | 538在线精品 | 两性免费视频 | 性一交一乱一精一晶 | 国产只有精品 | 国产欧美日韩在线观看 | 99精品欧美一区二区 | 亚洲av无码成人精品区 | 欧美大片xxxx | 午夜看看 | 手机看片日韩日韩 | 夜夜天天操 | 成人精品动漫 | 欧洲美女粗暴牲交免费观看 | 丁香久久久 | 亚洲一区二区三区三州 | 国产古装艳史毛片hd | 激情xxx| 亚洲成人精品一区二区三区 | 国产精品免费网站 | 天天综合人人 | 国产肉丝在线 | 伊人免费视频二 | 天天宗合 | 欧美在线中文字幕 | 亚洲一区国产精品 | av在线看片 | 亚洲精品久久久久久 | 日本a区 | 精品无码一区二区三区 | 国产中文字幕三区 | 1000部做爰免费视频 | 久色| 天天干天天摸天天操 | 在线视频天堂 | 欧美性动态图 | 欧美一级夜夜爽 | 免费人成视频在线播放 | 五月婷婷狠狠干 | 日本强好片久久久久久aaa | 96精品在线 | 久久草国产 | av在线免播放器 | 人妻丰满熟妇av无码区免 | 先锋av在线资源 | 日本黄色免费 | 午夜小视频在线播放 | 黑人巨大精品欧美一区二区蜜桃 | 久草网视频在线观看 | 亚洲av中文无码乱人伦在线视色 | 能在线观看的av网站 | 国产一级伦理片 | 日本高清不卡在线 | 波多野结衣亚洲一区二区 | 老汉色老汉首页av亚洲 | 91干视频| 欧美日本一二三区 |