一,定義
觀察者模式:定義了物件之間的一對多依賴,這樣一來,當乙個物件改變狀態時,它的依賴者會收到通知並自動更新。
二,角色介紹
(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 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...
觀察者模式
觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,讓他們能夠自動更新自己 任何乙個模式都是離不開角色的,這裡也會有幾種角色 抽象主題角色 把所有對觀察者物件的引用儲存在乙個集合中,每個抽象主題角色都可以有任意數量的觀察...