Python 高階程式設計 觀察者模式

2022-08-24 14:09:12 字數 2661 閱讀 5744

觀察者模式的定義 :

定義了物件之間一對多依賴,當乙個物件改變狀態時,這個物件的所有依賴者都會收到通知並按照自己的方式進行更新。

按照乙個氣象站的例子來看觀察者模式 

從氣象站取得資料後要在三個布告牌顯示這些資料,這三個布告牌顯示的內容都不一樣,一塊實時顯示氣象資料,一塊顯示一段時間的統計資料,一塊根據當前資料顯示**資料,當資料變化時,這三個布告牌要按照自己的方式實時更新資料,例如,實時顯示布告牌就顯示當前最新資料,統計資料布告牌將最大值最小值平均值顯示出來。

#

-*- coding:utf-8 -*-

class

observer(object):

#此處初始化乙個列表,用來收集 「觀察者」

def__init__

(self):

self._observers =

#註冊乙個觀察者,註冊乙個就往列表裡添乙個,同時更新一下他的資料

defregisterobserver(self, observer):

observer.update(self)

#呼叫觀察者函式的 update方法, self 是對 model 引數的賦值

#登出乙個觀察者,直接移走它,以後資料更新了,跟他毛關係都沒了

defremoveobserver(self, observer):

self._observers.remove(observer)

#通過遍歷 通知每乙個觀察者,資料更新了

defnotifyobserver(self):

for observer in

self._observers:

observer.update(self)

class weathermodel(observer): #

繼承了observer類,這樣它具有observer類的資料及方法

#初始化時,加入一些初始資料

def__init__

(self, temp, humidity, pressure):

super().

__init__

() self.temp =temp

self.humidity =humidity

self.pressure =pressure

#增加乙個valuechanged方法,當資料改變時,更新當前資料,然後通知每乙個觀察者資料變了,要更新了

defvaluechanged(self, temp, humidity, pressure):

if self.temp != temp or self.humidity != humidity or self.pressure !=pressure:

self.temp =temp

self.humidity =humidity

self.pressure =pressure

self.notifyobserver()

#定義兩個觀察者類,currentcondition和statisticcondition

class

currentcondition(object):

def__init__

(self):

self.currdata=

#每乙個觀察者都有乙個update方法,observer類裡面的registerobserver, notifyobservers方法就是呼叫的這個update

defupdate(self, model):

print('

i am update')

#這個佈告板對氣象資料進行統計

class

staticscondition(object):

#初始化了三個列表,分別存放溫度,濕度和壓力,這樣方便統計最大值,最小值和平均值

def__init__

(self):

self.setdatatemp =

self.setdatahumidity =

self.setdatapressure =

#它的update方法是將每個引數放到各自的列表中去

defupdate(self, model):

if__name__=="

__main__":

current =currentcondition()

model = weathermodel(20.0, 55.0, 1013.11)

model.registerobserver(current)

static =staticscondition()

model.registerobserver(static)

model.valuechanged(21.0, 52.3, 1013.12)

model.valuechanged(21.2, 53.3, 1013.12)

model.valuechanged(22.8, 56.1, 1013.18)

print

(current.currdata)

print

(static.setdatatemp)

print

(static.setdatahumidity)

print

(static.setdatapressure)

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