python观察者模式 多线程_Python 高级编程 ——观察者模式

#-*- coding:utf-8 -*-

classObserver(object):#此处初始化一个列表,用来收集 “观察者”

def __init__(self):

self._observers=[]#注册一个观察者,注册一个就往列表里添一个,同时更新一下他的数据

defregisterObserver(self, observer):

self._observers.append(observer)

observer.update(self)#调用观察者函数的 update方法, self 是对 model 参数的赋值

#注销一个观察者,直接移走它,以后数据更新了,跟他毛关系都没了

defremoveObserver(self, observer):

self._observers.remove(observer)#通过遍历 通知每一个观察者,数据更新了

defnotifyObserver(self):for observer inself._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

classCurrentCondition(object):def __init__(self):

self.currData=[]#每一个观察者都有一个update方法,Observer类里面的registerObserver, notifyObservers方法就是调用的这个update

defupdate(self, model):print('i am update')

self.currData.append((model.temp, model.humidity, model.pressure))#这个布告板对气象数据进行统计

classStaticsCondition(object):#初始化了三个列表,分别存放温度,湿度和压力,这样方便统计最大值,最小值和平均值

def __init__(self):

self.setDataTemp=[]

self.setDataHumidity=[]

self.setDataPressure=[]#它的update方法是将每个参数放到各自的列表中去

defupdate(self, model):

self.setDataHumidity.append(model.humidity)

self.setDataTemp.append(model.temp)

self.setDataPressure.append(model.pressure)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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值