目錄
創(chuàng)新互聯(lián)建站是一家從事企業(yè)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、做網(wǎng)站、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計制作的專業(yè)網(wǎng)絡(luò)公司,擁有經(jīng)驗豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨特的設(shè)計風(fēng)格。自公司成立以來曾獨立設(shè)計制作的站點近千家。1. 背景
1.1 天氣預(yù)報項目
2. 觀察者模式
2.1 觀察者模式解決天氣預(yù)報項目
2.2 觀察者模式在JDK中應(yīng)用
正常實現(xiàn)就是在氣象站中聚合第三方,當(dāng)數(shù)據(jù)發(fā)生變化是調(diào)用第三方的方法實現(xiàn)數(shù)據(jù)更新。
新增第三方時違反ocp原則, 不利于維護,也不能動態(tài)加入。
2. 觀察者模式 2.1 觀察者模式解決天氣預(yù)報項目其實可以沒有Subject接口,主要的類就是WeatherData,里面聚合一個Observe的List,實現(xiàn)觀察者注冊,刪除,通知等功能。
Observer:觀察者接口。
//觀察者接口,有觀察者來實現(xiàn)
public interface Observer {
public void update(float temperature, float pressure, float humidity);
}
public class CurrentConditions implements Observer {
// 溫度,氣壓,濕度
private float temperature;
private float pressure;
private float humidity;
// 更新 天氣情況,是由 WeatherData 來調(diào)用,我使用推送模式
public void update(float temperature, float pressure, float humidity) {
this.temperature = temperature;
this.pressure = pressure;
this.humidity = humidity;
display();
}
// 顯示
public void display() {
System.out.println("***Today mTemperature: " + temperature + "***");
System.out.println("***Today mPressure: " + pressure + "***");
System.out.println("***Today mHumidity: " + humidity + "***");
}
}
public class BaiDu implements Observer{
// 溫度,氣壓,濕度
private float temperature;
private float pressure;
private float humidity;
@Override
public void update(float temperature, float pressure, float humidity) {
this.temperature = temperature;
this.pressure = pressure;
this.humidity = humidity;
display();
}
// 顯示
public void display() {
System.out.println("===百度網(wǎng)站====");
System.out.println("***百度網(wǎng)站 氣溫 : " + temperature + "***");
System.out.println("***百度網(wǎng)站 氣壓: " + pressure + "***");
System.out.println("***百度網(wǎng)站 濕度: " + humidity + "***");
}
}
WeatherData
public class WeatherData {
// 溫度,氣壓,濕度
private float temperature;
private float pressure;
private float humidity;
//第三方集合
private Listobservers;
public WeatherData() {
this.observers = new ArrayList<>();
}
//當(dāng)數(shù)據(jù)有更新時,就調(diào)用 setData
public void setData(float temperature, float pressure, float humidity) {
this.temperature = temperature;
this.pressure = pressure;
this.humidity = humidity;
//調(diào)用dataChange, 將最新的信息 推送給 接入方 currentConditions
notifyObservers();
}
//注冊一個觀察者
public void registerObserve(Observer o) {
observers.add(o);
}
//移除一個觀察者
public void removeObserve(Observer o) {
observers.remove(o);
}
//遍歷所有的觀察者,并通知
public void notifyObservers() {
observers.forEach(a ->a.update(this.temperature, this.pressure, this.humidity));
}
public float getTemperature() {
return temperature;
}
public void setTemperature(float temperature) {
this.temperature = temperature;
}
public float getPressure() {
return pressure;
}
public void setPressure(float pressure) {
this.pressure = pressure;
}
public float getHumidity() {
return humidity;
}
public void setHumidity(float humidity) {
this.humidity = humidity;
}
public ListgetObservers() {
return observers;
}
public void setObservers(Listobservers) {
this.observers = observers;
}
}
Client
public class Client {
public static void main(String[] args) {
WeatherData weatherData = new WeatherData();
Observer baiDu = new BaiDu();
CurrentConditions currentConditions = new CurrentConditions();
weatherData.registerObserve(baiDu);
weatherData.registerObserve(currentConditions);
weatherData.setData(10f,20f,30f);
System.out.println("=======================");
weatherData.removeObserve(baiDu);
weatherData.setData(100f,200f,300f);
}
}
2.2 觀察者模式在JDK中應(yīng)用JDK的?Observable類?就是JDK幫我們寫好的一個觀察者模式。
Observable:相當(dāng)于Weather,已經(jīng)幫我們寫好了管理Observer的方法。
Observer:就是我們剛才寫的接口。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前題目:設(shè)計模式之觀察者模式(十四)-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://jinyejixie.com/article40/djedeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、Google、網(wǎng)站改版、網(wǎng)站營銷、虛擬主機、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容