一模式定義
觀察者模式,又稱為發(fā)布/訂閱模式。觀察者模式定義了對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并被自動(dòng)更新。
二模式舉例
1 模式分析
我們借用氣象局高溫預(yù)警來(lái)說(shuō)明這一模式。
2觀察者模式靜態(tài)類圖
3代碼示例
3.1觀察者接口一IObserver
3.2主題接口一ISubject
3.3具體主題實(shí)現(xiàn)一Subject
3.4個(gè)人觀察者一PersonObserver
3.5政府觀察者一GovernmentObserver
3.6企事業(yè)單位觀察者一CompanyObserver
3.7讓系統(tǒng)開(kāi)始運(yùn)行一Client
4運(yùn)行結(jié)果
======氣象部門發(fā)布高溫黃色警報(bào)!======
企事業(yè)單位收到高溫預(yù)警: 溫度:35.0
政府部門收到高溫預(yù)警: 溫度:35.0
個(gè)人收到高溫預(yù)警: 溫度:35.0
======氣象部門發(fā)布高溫紅色警報(bào)!======
企事業(yè)單位收到高溫預(yù)警: 溫度:43.0
政府部門收到高溫預(yù)警: 溫度:43.0
個(gè)人收到高溫預(yù)警: 溫度:43.0
======氣象部門發(fā)布高溫橙色警報(bào)!======
企事業(yè)單位收到高溫預(yù)警: 溫度:37.0
政府部門收到高溫預(yù)警: 溫度:37.0
個(gè)人收到高溫預(yù)警: 溫度:37.0
三該模式設(shè)計(jì)原則
1"開(kāi)——閉"原則
2單一職責(zé)原則
3依賴倒置原則
四使用場(chǎng)合
1當(dāng)一個(gè)抽象模型有兩個(gè)方面,其中一個(gè)方面依賴于另一個(gè)方面,需要將這兩個(gè)方面分別封裝到獨(dú)立對(duì)象中,彼此獨(dú)立地改變和復(fù)用的時(shí)候。
2當(dāng)一個(gè)系統(tǒng)中一個(gè)對(duì)象的改變需要同時(shí)改變其他對(duì)象內(nèi)容,但又不知道待改變對(duì)象到底有多少個(gè)的時(shí)候。
3當(dāng)一個(gè)對(duì)象的改變必須通知其他對(duì)象做出相應(yīng)的變化,但是不能確定通知對(duì)象是誰(shuí)的時(shí)候。
五"推數(shù)據(jù)"靜態(tài)類圖
所謂"推數(shù)據(jù)",就是當(dāng)被觀察對(duì)象發(fā)生改變時(shí),將相關(guān)數(shù)據(jù)通過(guò)參數(shù)形式傳遞給觀察者,這就形成了被觀察者"推數(shù)據(jù)"給觀察者,靜態(tài)類圖如下:
六"拉數(shù)據(jù)"靜態(tài)類圖
所謂"拉數(shù)據(jù)",觀察者對(duì)象含有一個(gè)對(duì)被觀察者對(duì)象實(shí)例的引用,當(dāng)被觀察者對(duì)象發(fā)生變化時(shí),不會(huì)傳遞任何數(shù)據(jù)給觀察者,而由觀察者根據(jù)被觀察者對(duì)象實(shí)例的引用主動(dòng)獲取相關(guān)的數(shù)據(jù),這就形成了觀察者主動(dòng)從被觀察對(duì)象中"拉數(shù)據(jù)“,靜態(tài)類圖如下:
聯(lián)系客服