Python程式中的觀察者模式結構編寫示例

2022-10-04 21:51:51 字數 1771 閱讀 6050

察者模式定義

定義了物件之間的一對多依賴,這樣一來,當乙個物件改變狀態時,它的所有依賴都會收到通知並自動更新。觀察者模式提供了一種物件設計,讓主題和觀察者之間松耦合。

設計原則

為了互動物件之間的松耦合設計而努力。松耦合的設計之所以能讓我們建立有彈性的系統,能夠應對變化,是因為物件之間的互相依賴降到了最低。

模式結構與說明

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 如果乙個被...