觀察者模式是一種物件行為模式。它定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新,這種模式有時又稱作發布-訂閱模式、模型-檢視模式。在觀察者模式中,主體是通知的發布者,它發出通知時並不需要知道誰是它的觀察者,可以有任意數目的觀察者訂閱並接收通知。觀察者模式不僅被廣泛應用於軟體介面元素之間的互動,在業務物件之間的互動、許可權管理等方面也有廣泛的應用。
例如,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。
觀察者模式的結構:
抽象主題(abstractsubject):也叫抽象目標類,它提供了乙個用於儲存觀察者物件的聚集類和增加、刪除觀察者物件的方法,以及通知所有觀察者的抽象方法。
具體主題(subject):也叫具體目標類,它實現抽象目標中的通知方法,當具體主題的內部狀態發生改變時,通知所有註冊過的觀察者物件。
抽象觀察者(abstractobserver):它是乙個抽象類或介面,它包含了乙個更新自己的抽象方法,當接到具體主題的更改通知時被呼叫。
具體觀察者(observer):實現抽象觀察者中定義的抽象方法,以便在得到目標的更改通知時更新自身的狀態。
"""抽象主題(抽象目標類):
定義增加、刪除觀察者的方法
通知觀察者的抽象方法
"""def
__init__
(self):
self.observers =
defadd(self, observer):
if observer not
inself.observers:
else
:
print("
%s observer is exist, add failed
" %observer)
defremove(self, observer):
if observer in
self.observers:
self.observers.remove(observer)
else
:
print("
%s observer is not exist, remove failed
" %observer)
@abc.abstractmethod
defnotify(self):
pass
class
subject(abstractsubject):
"""具體主題(具體目標類)
"""def
__init__
(self, name):
super().
__init__
() self.name =name
self._data =none
@property
defdata(self):
return
self._data
@data.setter
defdata(self, new_data):
"""當資料更新時,去通知觀察者
"""self._data =new_data
self.notify()
defnotify(self):
"""通知觀察者的具體方法
"""for obs in
self.observers:
obs.notify(self._data)
class abstractobserver(metaclass=abc.abcmeta):
"""抽象觀察者
"""@abc.abstractmethod
def notify(self, data, *args, **kwargs):
pass
class
observer1(abstractobserver):
"""具體觀察者-1
"""def notify(self, data, *args, **kwargs):
print("
發布的訊息是:%s
" %data)
class
observer2(abstractobserver):
"""具體觀察者-2
"""def notify(self, data, *args, **kwargs):
print("
發布的訊息是:%s
" %data)
#具體主題(訊息發布者)
sub = subject("
ming")
#具體觀察者
obs1 =observer1()
obs2 =observer2()
#新增觀察者
sub.add(obs1)
sub.add(obs2)
#發布訊息後,觀察者得到訊息
sub.data = "
號外號外!
"
python觀察者模式 python 觀察者模式
python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...
觀察者模式(發布訂閱模式)
簡介 觀察者模式 又被稱為發布 訂閱 public subscribe 模式,屬於行為型模式的一種,它定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件再狀態變化時,會通知所有的觀察者物件,使他們能夠自動更新自己。塊 public 發布動態 button 觀察者 粉絲 ...
觀察者模式 訂閱發布模式
觀察者模式是一種物件間的一對多依賴關係,當乙個物件的狀態發生變化時,所有依賴他的物件都將得到通知。通常運用在物件之間的訊息通訊中。比如現在有一群學生,可以組成小組,可以尋求幫助 class students askforhelp subject 向大家尋求幫助 this.tasks.foreach ...