觀察者模式

2021-08-31 02:04:01 字數 944 閱讀 4894

作用:

在某乙個物件的狀態發生變化的時候,某些其它的物件做出相應的改變。

正文:

觀察者模式是一對多的模式,是那種你一旦理解了,就會覺得到處都可以用的模式之一,所以你一定要抵擋的住**,過度使用觀察者模式往往會導致系統難以理解和跟蹤。

觀察者模式分為兩種模型,為拉模型和推模型。

讓我們來看個例子。

冬天的早上,起床是件痛苦的事,特別是對那些夜貓子,所以都用手機設個鬧鐘。

早上時間到了,手機鬧鈴響了,睡得迷迷糊糊的,也不知道幾點鐘了,就拿起手機看看時間。這就是乙個典型的拉模型的觀察者模式,notify方法和timeout方法都不帶引數,當時間到時,notify方法就呼叫相應的timeout方法,當觀察物件收到通知訊息後,要想知道現在的時間,就需要從phone中「拉出」時間。

讓我們再來看乙個例子。

隨著科技的發展,手機的功能增強了,鬧鐘能夠報時了。

現在鬧鈴響了,就不需要去看手機了,語音報時把時間「推到」我們的耳朵裡。這就是推模型的觀察者模式,notify方法和timeout方法都帶乙個時間引數,當時間到時,notify方法就呼叫相應的timeout方法,當觀察物件收到通知訊息後,也就知道現在的時間。當然推模型的觀察者模式不一定不需要從被觀察物件中去拉資訊,「推」的意思是指把發生什麼變化通知給觀察物件。

現實的應用中也有許多,**的註冊就是乙個普遍的例子,**的更新通知到每個註冊者。大家可以去思考一下,**的註冊的例子什麼時候是推模型的觀察者模式,什麼時候是拉模型的觀察者模式,思考後,你就會更明白觀察者模式了。

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

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

觀察者模式

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

觀察者模式

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