設計模式 觀察者模式 python

2022-04-03 00:56:22 字數 2077 閱讀 1155

觀察者模式:

物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時, 所有依賴於它的物件都得到通知並被自動更新。

主要解決:

當乙個抽象模型有兩個方面, 其中乙個方面依賴於另一方面。將這二者封裝在獨立的物件中以使它們可以各自獨立地改變和復用。

當對乙個物件的改變需要同時改變其它物件, 而不知道具體有多少物件有待改變。

當乙個物件必須通知其它物件,而它又不能假定其它物件是誰。

例子:主體:報社,報社的業務就是出版報紙

只要有新的報值更新,就會送給訂閱了的讀者a,讀者b等等

觀察者:讀者,ab訂閱了報紙,那麼只要有更新,就會送給ab

a取消了訂閱,那麼即使報紙更新了,也不會送給a,

#主體class subject(object):

def __init__(self):

#_observers [元素是觀察者observer的物件]

#這裡將主體和觀察者繫結到一塊兒了

self._observers =

#增加觀察/訂閱者

def add_observer(self, observer):

if not observer in self._observers:

#刪除觀察/訂閱者

def delete_observer(self, observer):

self._observers.remove(observer)

#通知觀察/訂閱者 更新

def notify_observer(self):

for observer in self._observers:

#呼叫的觀察者的自定義的update方法

observer.update(self)

# 具體的主題(新聞),這裡newsdata繼承了sudject

class newsdata(subject):

def __init__(self, name,data=0):

#等於super(subject,self).__init__()

#不覆蓋subjet父類的init方法

subject.__init__(self)

self.name = name

self.data=data

def begin_change(self, value):

self.data = value

self.notify_observer()

#具體觀察者observer1號

class observera:

#subject變化後,依賴subject的那部分資料也要跟著更新

#此方法早subject的notify_observers中被呼叫

def update(self,newsdata):

print('我是訂閱者a,正在的新聞名稱%s, 第%s次變化' %

(newsdata.name, newsdata.data))

#具體觀察者observer2號

class observerb:

#subject變化後,依賴subject的那部分資料也要跟著更新

def update(self,newsdata):

print('我是訂閱者b,正在的新聞名稱%s, 第%s次變化' %

(newsdata.name, newsdata.data))

#主體開始發布新聞

newsdata=newsdata('北京突發新聞')

observera=observera()

observerb=observerb()

#新增訂閱者

newsdata.add_observer(observera)

newsdata.add_observer(observerb)

#通知訂閱著

newsdata.begin_change(4)

#訂閱者無序給便任何**,就可以隨著主題更新而更新了

# 我是訂閱者a,正在的新聞名稱北京突發新聞, 第4次變化

# 我是訂閱者b,正在的新聞名稱北京突發新聞, 第4次變化

python 設計模式 觀察者 觀察者設計模式

在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...

Python設計模式 觀察者模式

基於3.5.2,如下 coding utf 8 觀察者設計模式 class observerinte ce def update self,value raise notimplementederror class nbaperson observerinte ce def init self,na...

python設計模式 觀察者模式

首先先來了解乙個最簡單的觀察者模式,我就拿乙個最經典的例子來解釋 我和小明 觀察者 去訂報 觀察者行為 郵局 被觀察者 有報紙 被觀察者行為 就會通知我和小明 那麼首先來看觀察者的方法吧,觀察者裡面只有乙個介面,就是郵件給我報紙,我就有報紙了,只有這乙個抽象方法has news observerin...