在現實世界中,許多物件並不是獨立存在的,其中乙個物件的行為發生改變可能會導致乙個或者多個其他物件的行為也發生改變。
例如,某種商品的物價**時會導致部分商家高興,而消費者傷心;
這樣的例子還有很多,例如小偷與警察,貓和老鼠等
觀察者模式就如乙個聊天室,當你需要收到聊天室的訊息時,你就註冊成為聊天室的成員,當聊天室有資訊更新時,就會傳到你那去。當你不需要接收聊天室的資訊時,可以登出掉,退出聊天室。
觀察者(observer)模式的定義:指多個物件間存在一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。這種模式有時又稱作發布-訂閱模式、模型-檢視模式,它是物件行為型模式。
降低了目標與觀察者之間的耦合關係,兩者之間是抽象耦合關係。
目標與觀察者之間建立了一套觸發機制。
目標與觀察者之間的依賴關係並沒有完全解除,而且有可能出現迴圈引用。
當觀察者物件很多時,通知的發布會花費很多時間,影響程式的效率。
通過前面的分析與應用例項可知觀察者模式適合以下幾種情形。
物件間存在一對多關係,乙個物件的狀態發生改變會影響其他物件。
當乙個抽象模型有兩個方面,其中乙個方面依賴於另一方面時,可將這二者封裝在獨立的物件中以使它們可以各自獨立地改變和復用。
參考
python 設計模式 觀察者 觀察者設計模式
在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...
Python 設計模式之觀察者模式
觀察者模式之西遊記師徒四人 被觀察者 class imaster object def init self self.prentice list def name self raise notimplementederror 收徒def add prentice self,prentice if i...
python觀察者模式 python 觀察者模式
python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...