老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)

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

目錄

創(chuàng)新互聯(lián)建站是一家從事企業(yè)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、做網(wǎng)站、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)制作的專業(yè)網(wǎng)絡(luò)公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁(yè)設(shè)計(jì)人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)近千家。

1. 背景

1.1 天氣預(yù)報(bào)項(xiàng)目

2. 觀察者模式

2.1 觀察者模式解決天氣預(yù)報(bào)項(xiàng)目

2.2 觀察者模式在JDK中應(yīng)用


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

正常實(shí)現(xiàn)就是在氣象站中聚合第三方,當(dāng)數(shù)據(jù)發(fā)生變化是調(diào)用第三方的方法實(shí)現(xiàn)數(shù)據(jù)更新。

新增第三方時(shí)違反ocp原則, 不利于維護(hù),也不能動(dòng)態(tài)加入。

2. 觀察者模式 2.1 觀察者模式解決天氣預(yù)報(bào)項(xiàng)目

其實(shí)可以沒有Subject接口,主要的類就是WeatherData,里面聚合一個(gè)Observe的List,實(shí)現(xiàn)觀察者注冊(cè),刪除,通知等功能。

Observer:觀察者接口。

//觀察者接口,有觀察者來實(shí)現(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ù)有更新時(shí),就調(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();
    }

    //注冊(cè)一個(gè)觀察者
    public void registerObserve(Observer o) {
        observers.add(o);
    }

    //移除一個(gè)觀察者
    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幫我們寫好的一個(gè)觀察者模式。

Observable:相當(dāng)于Weather,已經(jīng)幫我們寫好了管理Observer的方法。

Observer:就是我們剛才寫的接口。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)站欄目:設(shè)計(jì)模式之觀察者模式(十四)-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://www.xueling.net.cn/article/djedeo.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 99精品综合加勒比在线观 | 嫩草天堂| 欧美无砖专区一中文字 | 7799精品天天综合网 | 99久久国产综合精品色伊 | 99re在线视频免费观看 | 中国老太太WBBHD | 人妻av无码专区 | 亚洲精品无码久久久久AV老牛 | 国产色小视频 | 国产真实乱免费高清视频 | 三级黄色的视频 | 国产精品丝袜www爽爽爽 | 欧美日韩精品一区 | 欧美极品免费 | 91天天操| 337p粉嫩大胆色噜噜噜噜亚洲 | 国产97成人亚洲综合在线 | 成人黄色一级视频 | 在线免费观看日本 | 久久成人综合视频 | 国产精品99久久精品爆乳 | 国产又粗又猛又爽又黄的视频软件 | 中文字幕日韩精品欧美一区蜜桃网 | 成人av中文解说水果派 | www.亚洲com| 亚洲精品无码鲁网午夜 | 欧美性久久久久久 | 91亚洲精华国产精华精华液 | 狠狠躁夜夜躁人人爽天天30人 | 精品无人区麻豆乱码无限制 | www黄色免费| 亚洲成人看片 | 日本黄色小视频 | 懂色av一区二区三区蜜臀 | www.日韩视频 | 成年人免费看视频 | 久久久久久666 | 亚洲自拍偷拍av | 欧美久久国产精品 | 国产女主播视频一区二区三区 |