觀察者模式的定義 :
定義了物件之間一對多依賴,當乙個物件改變狀態時,這個物件的所有依賴者都會收到通知並按照自己的方式進行更新。
按照乙個氣象站的例子來看觀察者模式
從氣象站取得資料後要在三個布告牌顯示這些資料,這三個布告牌顯示的內容都不一樣,一塊實時顯示氣象資料,一塊顯示一段時間的統計資料,一塊根據當前資料顯示**資料,當資料變化時,這三個布告牌要按照自己的方式實時更新資料,例如,實時顯示布告牌就顯示當前最新資料,統計資料布告牌將最大值最小值平均值顯示出來。
#-*- 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)
(current.currdata)
(static.setdatatemp)
(static.setdatahumidity)
(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 如果乙個被...