headfirsh设计模式——观察者模式例子

"""
观察者模式
"""
class Subject(object):
	def RegisterObserver(self, pObserver): # 注册
		pass
	
	def RemoveObserver(self, pObserver): # 删除
		pass
	
	def NotifyObserver(self): # 触发监听
		pass

class Observer(object):
	def Update(self, *args):
		print("更新了数据")
		print(args)

class DisplayElement(object):
	def display(self, *args):
		pass

class WeatherData(Subject):
	def __init__(self):
		self.Observers = dict()
		self.temp = 0
		self.humidity = 0
		self.pressure = 0

	def RegisterObserver(self, pObserver):
		print("加入监听")
		self.Observers[pObserver] = [self.temp, self.humidity, self.pressure]

	def RemoveObserver(self, pObserver):
		if pObserver in self.Observers:
			self.Observers.pop(pObserver)
			print("移除监听")
	
	def NotifyObserver(self):
		for pItem, bValue in self.Observers.items():
			print("触发监听")
			pItem.Update(self.temp, self.humidity, self.pressure)

	def MeasurementChanged(self):
		self.NotifyObserver()

	def SetMeasurements(self, ia, ib, ic):
		self.temp = ia
		self.humidity = ib
		self.pressure = ic
		self.MeasurementChanged()

class CurrentConditionDisplay(Observer, DisplayElement):
	def __init__(self):
		self.temp = 0
		self.hundity = 0
		self.dity = None

	def CurrentConditionDisplay(self, pObj):
		self.dity = pObj
		pObj.RegisterObserver(self)

	def Update(self, ia, ib, ic):
		self.temp = ia
		self.hundity - ib
		print(ia)
		print(ib)
		print(ic)
		print("更新了数据")
		self.display()

	def display(self):
		pass


class Test(object):
	def __init__(self):
		self.Num = 0
		self.WeatherData = WeatherData()
		self.Obj = CurrentConditionDisplay()

	def Logic(self):
		print("注册监听")
		self.Obj.CurrentConditionDisplay(self.WeatherData)

	def Update(self):
		print("改变了数据")
		self.Num += 1
		iNum1 = self.Num ** 2
		iNum2 = iNum1 / 2
		iNum3 = iNum1 * iNum2
		self.WeatherData.SetMeasurements(iNum1, iNum2, iNum3)

	def Remove(self):
		self.WeatherData.RemoveObserver(self.Obj)

obj = Test()
obj.Update()
obj.Logic()
obj.Update()
obj.Remove()
obj.Update()

"""
改变了数据
注册监听  
加入监听  
改变了数据
触发监听  
4
2.0       
8.0
更新了数据
移除监听
改变了数据
"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值