"""
观察者模式
"""
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
更新了数据
移除监听
改变了数据
"""
headfirsh设计模式——观察者模式例子
最新推荐文章于 2024-07-18 09:44:48 发布