察者模式定義
定義了物件之間的一對多依賴,這樣一來,當乙個物件改變狀態時,它的所有依賴都會收到通知並自動更新。觀察者模式提供了一種物件設計,讓主題和觀察者之間松耦合。
設計原則
為了互動物件之間的松耦合設計而努力。松耦合的設計之所以能讓我們建立有彈性的系統,能夠應對變化,是因為物件之間的互相依賴降到了最低。
模式結構與說明
1.subject:主題(目標)介面,主題可以註冊、移除對其感興趣的觀察者,在自身資料發生變化的時候,還可以通知這些觀察者。乙個主題可以有多個觀察者,需要注意的是,觀察者的順序應當是無關緊要的。主題也被稱為「被觀察者」(observable)
2.所有的觀察者必須實現observer介面,以便主題狀態發生變化時,可以被通知
觀察者模式是一種廣泛使用、非常重要的設計模式,它有利於降低物件間的耦合,同時讓物件保持高度協作。該模式的松耦合特性體現在:
1.關於觀察者的一切,主題只知道它實現了觀察者介面,其它一概不知
2.在任何時候,主題的觀察者可以被動態的新增、刪除
3.當新型別的觀察者出現時,主題的**不需要進行修改
4.修改主題或者觀察者的任一方,對方不會受到影響
示例通過注釋就可以清晰理解~
#observer pattern
class subject():
def __init__(self,dat):
self.listobj = list() #主題中的列表變數用來儲存觀察者
self.dat = dat #主題中的資料變化時,需要通知觀察者
defwww.cppcns.com registerobject(self,obj):
self.listobj.append(obj) #實現訂閱主題的函式
def removeobject(self,obj):
pass
def notifyobservers(self):#通知各個觀察者資料已經發程式設計客棧生變化,觀察者相應需要更新自己的資料
for i in rangwww.cppcns.come(len(self.listobj)):
self.liswww.cppcns.comtobj[i].update()
def setdat(self,new_dat):#設定資料
if self.dat != new_dat:
self.dat = new_dat
self.notifyobservers()
class observer():#觀察者
def __init__(self,sub): #觀察者初始化時,需要訂閱主題
self.sub = sub
self.sub.registerobject(self)
self.number = self.sub.dat
def update(self):#觀察者更新
self.number = self.sub.dat
def display(self):
print self.numberwww.cppcns.com
if __name__ =="__main__":
su = subject(10)
ob1 = observer(su)
ob1.display()
ob2 = observer(su)
ob2.display()
su.setdat(11)
ob1.display()
ob2.display()
本文標題: python程式中的觀察者模式結構編寫示例
本文位址:
python觀察者模式 python 觀察者模式
python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...
python 設計模式 觀察者 觀察者設計模式
在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...
Python觀察者模式
1 2定義定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新 角色抽象發布者 subject 具體發布者 concretesubject 抽象觀察者 obeserver 優點1 觀察者和被觀察者是抽象耦合的。2 建立一套觸發機制。缺點1 如果乙個被...