成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

設(shè)計模式之觀察者模式(十四)-創(chuàng)新互聯(lián)

目錄

創(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)用


1. 背景 1.1 天氣預(yù)報項目 天氣預(yù)報項目需求 , 具體要求如下:
  • 氣象站可以將每天測量到的溫度,濕度,氣壓等等以公告的形式發(fā)布出去(比如發(fā)布到自己的網(wǎng)站或第三方)。
  • 需要設(shè)計開放型API,便于其他第三方也能接入氣象站獲取數(shù)據(jù)。
  • 提供溫度、氣壓和濕度的接口。
  • 測量數(shù)據(jù)更新時,要能實時的通知給第三方。

正常實現(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)

成都網(wǎng)站建設(shè)
称多县| 信阳市| 法库县| 嘉荫县| 丰都县| 磴口县| 恩施市| 乳山市| 梓潼县| 梓潼县| 南靖县| 柳河县| 河间市| 昌吉市| 洪湖市| 托克逊县| 华阴市| 石门县| 通化县| 咸阳市| 临湘市| 天津市| 宽甸| 平潭县| 阳江市| 三江| 塔河县| 江永县| 黑水县| 皋兰县| 泽州县| 沿河| 内丘县| 商都县| 和顺县| 鄂托克旗| 辽中县| 泾源县| 清镇市| 涪陵区| 庆元县|