监听者模式
又名观察者模式,就是观察与被观察的关系。比如在上课时看时间到没到下课时间,那么你就是观察者,时间就是被观察者。观察者模式是对象的行为模式,模型/视图模式。
核心思想是在被观察者与观察者之间建立一种自动触发的关系
在自动浇花机中,土壤湿度传感器就是被观察者,观察者就是水泵的开关。需要浇水的时候,水泵就打开。不需要浇水的时候,可以使用喷雾或者待机。
from abc import ABCMeta , abstractmethod
class Obserable:
#被观察者的基类
def __init__(self):
self.__observers = []
def addObserver(self,observer):
self.__observers.append(observer)
def removeObserver(self,observer):
self.__observers.remove(observer)
def notifyObservers(self):
for observer in self.__observers:
observer.update(self)
class Observer(metaclass=ABCMeta):
@abstractmethod
def update(self,obserable:Obserable):
pass
#传感器 被监听的对象
class HumiditySensor(Obserable):
def __init__(self):
super().__init__()
self.__soilHumidity = 0
def getHumidity(self):
return self.__soilHumidity
def setHumidity(self,humidity):
self.__soilHumidity = humidity
print("当前土壤湿度: "+str(self.__soilHumidity))
self.notifyObservers()
#喷水头 监听对象
class Sprinker(Observer):
def update(self,obserable:HumiditySensor):
if(obserable.getHumidity() > 40):
print("土壤湿度到达阈值!准备开始浇水。。。。")
class Smog(Observer):
def update(self,obserable:HumiditySensor):
if(obserable.getHumidity() <= 40):
print("土壤湿度还没达到需要浇水的阈值!喷雾启动。。。。。")
def testDemo():
humiditySensor = HumiditySensor()
sprinker = Sprinker()
smog = Smog()
humiditySensor.addObserver(sprinker)
humiditySensor.addObserver(smog)
humiditySensor.setHumidity(22)
humiditySensor.setHumidity(42)
humiditySensor.setHumidity(62)
humiditySensor.setHumidity(10)
testDemo()
在树莓派上或者是Arduino上,就可以使用这种方法来使用湿度传感器