定義

觀察者模式(有時又被稱為發(fā)布(publish)-訂閱(Subscribe)模式,在此種模式中,一個目標物件管理所有相依于它的觀察者物件,并且在它本身的狀態(tài)改變時主動發(fā)出通知。這通常透過呼叫各觀察者所提供的方法來實現(xiàn)。此種模式通常被用來實現(xiàn)事件處理系統(tǒng)(摘自百度百科)。

關鍵詞:發(fā)布-訂閱

為什么只有一個關鍵詞?因為我覺得一個關鍵詞足夠說明問題了。觀察者模式適用于,一個對象改變時,需要通知一個或多個其他對象,而需要通知的對象的特點是:數(shù)量不清楚,類型不清楚(僅實現(xiàn)了一個通用接口),具體處理方式不清楚。

舉個例子來說明:

小花:你好,我開發(fā)過很多erp系統(tǒng),是一位經(jīng)驗豐富的女司機,現(xiàn)在想找一份java程序員的工作...(成熟穩(wěn)重型)

獵頭:好的,我已經(jīng)把你加入到我的程序員清單里面了,不要打電話給我,我會通知你的(好萊塢原則)

小明:本人學識淵博、經(jīng)驗豐富,代碼風騷、效率恐怖,c/c++、java、php無不精通,熟練掌握各種框架,深山苦練20余年,一天只睡4小時,電話通知出bug后秒登vpn,千里之外定位問題,瞬息之間修復上線。 身體強壯、健步如飛,可連續(xù)編程100小時不休息,討論技術方案5小時不喝水,上至帶項目、出方案,下至盜賬號、威脅pm,什么都能干......(花式裝逼型)

獵頭:666,我已經(jīng)把你加入到我的程序員清單里面了,不要打電話給我,我會通知你的(小明和小花注冊為觀察者)

小花和小明繼續(xù)過著自己的日子,因為他們已經(jīng)在獵頭的清單里面了,有工作會收到通知的。

獵頭:小花同學,小明同學,這里需要一個資深的全棧工程師,創(chuàng)業(yè)型,彈性工作制,股票期權,年終分紅...(通知所有觀察者

小明:好的(隨后憑借著小明的機智,獲得了這份工作)

獵頭:請把介紹費匯到我的銀行卡

又過了一段日子,小花憑借著自己豐富的經(jīng)驗,找到了工作,并沒有依靠獵頭,所以也就沒有什么介紹費

小花:我已經(jīng)找到工作了,請不要再給我發(fā)招聘信息了(移除觀察者)

10年之后...

小花娶妻生子,迎娶白富美,出任CEO,走上人生巔峰,孩子已經(jīng)快要1米高了....(等等,好像有什么地方不對)

小明由于天天加班,1天只睡4個小時,墳頭草已經(jīng)1米高了...

當然這個是后話

以上就是訂閱和發(fā)布的解釋,當然,我可以實話告訴你,這個和我下面要貼的代碼并沒有什么關系。

一個氣象監(jiān)測應用的需求

概述:建立一個氣象觀測的應用,從氣象站獲取數(shù)據(jù),并實時更新三個布告板:目前狀況,天氣統(tǒng)計,天氣預報

目前狀況:溫度,濕度,氣壓

天氣統(tǒng)計:平均溫度,最低溫度,最高溫度

天氣預報:明天下雨嗎?

以下是具體實現(xiàn),涉及到的設計原則:

1,針對抽象編程,不針對實現(xiàn)編程

2,多用組合少用繼承

3,開閉原則,對擴展開放,對修改關閉(所有設計模式都是圍繞這個終極目