觀察者模式

2021-08-14 20:59:09 字數 2654 閱讀 3312

一,定義

觀察者模式:定義了物件之間的一對多依賴,這樣一來,當乙個物件改變狀態時,它的依賴者會收到通知並自動更新。

二,角色介紹

(1)抽象主題介面:所有具體主題類都要實現這個介面;

(2)具體主題類:實現抽象主題介面,可以有多個;

(3)抽象觀察者介面:有乙個update()方法,同一具體主題類的所有具體觀察者都要實現這個介面;

(4)具體觀察者介面:持有抽象主題類的引用,實現抽象觀察者介面,必須註冊乙個具體主題類。

三,類圖

四,乙個小例子

(1)建立乙個抽象主題介面

/**

* 主題介面

*/public

inte***ce

subject

(2)建立乙個具體主題介面

/**

* 具體主題類(天氣預報)

*/public

class

weatherdata

implements

subject

public

void

registerobserver(observer o)

public

void

removeobserver(observer o)

}public

void

notifyobservers()

}public

void

measurementschanged()

public

void

setmeasurements(float temperature, float humidity, float pressure)

public

float

gettemperature()

public

float

gethumidity()

public

float

getpressure()

}

(3)建立乙個抽象觀察者介面

/**

* 觀察者介面

*/public

inte***ce

observer

(4)建立兩個具體觀察者介面

/**

* 具體觀察者1(溫度顯示)

*/public

class

statisticsdisplay

implements

observer, displayelement

// 用主題的最新資料更新原資料

public

void

update(float temp, float humidity, float pressure)

if (temp < mintemp)

display();

}public

void

display()

}

/**

* 具體觀察者2(氣壓顯示)

*/public

class

forecastdisplay

implements

observer, displayelement

public

void

update(float temp, float humidity, float pressure)

public

void

display() else

if (currentpressure == lastpressure) else

if (currentpressure < lastpressure) }}

(5)測試

public

class weatherstationheatindex

}

(6)輸出

平均/最高/最低 溫度 = 80.0/80.0/80.0

預報: 天氣在慢慢轉好!

平均/最高/最低 溫度 = 81.0/82.0/80.0

預報: 氣壓降低,可能要下雨了。

平均/最高/最低 溫度 = 80.0/82.0/78.0

預報: 天氣沒什麼變化

五,設計原則

觀察者模式體現了乙個很好的設計原則,就是:為互動物件之間的松耦合而努力。主題類不需要知道它的觀察者的具體實現,只要這些觀察者實現了共同的觀察者介面,然後通過多型,主題就可以把資訊推送給那些具體的觀察者,實現互動。

六,小結

觀察者模式,就結構來說,有兩個不同的介面,這兩個介面各自有不同的實現者,而這些不同實現者之間的互動可以通過這兩個介面完成,而不需要依賴具體的實現類。可以新建多個不同的主題類和觀察者,每個觀察者都可以被不同的主題類註冊。當有新型別的觀察者出現時,只需在該類中實現該觀察者介面,然後註冊為觀察者即可。主題不在乎別的,它只會發通知給那些實現了觀察者介面的物件。

python觀察者模式 python 觀察者模式

python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...

觀察者模式

觀察者模式 observer 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...

觀察者模式

觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,讓他們能夠自動更新自己 任何乙個模式都是離不開角色的,這裡也會有幾種角色 抽象主題角色 把所有對觀察者物件的引用儲存在乙個集合中,每個抽象主題角色都可以有任意數量的觀察...