监听模式:在对象之间定义一种一对多的关系,当这个对象发生改变时,所有依赖它的对象都会被通知到。核心就是建立起被观察者和观察者之间的一种自动触发的关系。
监听者模式是对象的行为模式,又叫发布/订阅模式、模型/视图模式、源/监听器模式或者从属者模式。
from abc import ABCMeta,abstractmethod
class WaterHeater:
def __init__(self):
self.__observers=[]
self.__temperature=25
def getTemperature(self):
return self.__temperature
def setTemperature(self,temperature):
self.__temperature = temperature;
print("当前温度是:",str(self.__temperature)+"℃")
self.__notifies()
def addObserver(self,observer):
self.__observers.append(observer)
def __notifies(self):
for o in self.__observers:
o.update(self)
class Observer(metaclass=ABCMeta):
@abstractmethod
def update(self,waterHeater):
pass
class Washing(Observer):
def update(self,waterHeater):
if waterHeater.getTemperature()>=50 and waterHeater.getTemperature()<70:
print("可以洗澡了")
class Drink(Observer):
def update(self,waterHeater):
if waterHeater.getTemperature() >= 100:
print("水烧开了,可以喝了")
def testWaterHeater():
heater = WaterHeater()
wash = Washing()
drink = Drink()
heater.addObserver(wash)
heater.addObserver(drink)
heater.setTemperature(50)
heater.setTemperature(100)
testWaterHeater()
运行结果:
当前温度是: 50℃
可以洗澡了
当前温度是: 100℃
水烧开了,可以喝了
通过上面的例子可以提取出监听者模式的代码框架:
from abc import ABCMeta,abstractmethod
class Observer(metaclass=ABCMeta):
@abstractmethod
def update(self,observable,object):
pass
class Observable:
def __init__(self):
self.__observer = []
def addObserver(self,observer):
self.__observer.append(observer)
def removeObserver(self,observer):
self.__observer.remove(observer)
def notify(self,object):
for o in self.__observer:
o.update(object)
监听者有两种模式:推模型和拉模型
aaa