自动浇花机中用到的监听者模式 (Python)

监听者模式

又名观察者模式,就是观察与被观察的关系。比如在上课时看时间到没到下课时间,那么你就是观察者,时间就是被观察者。观察者模式是对象的行为模式,模型/视图模式。

核心思想是在被观察者与观察者之间建立一种自动触发的关系

在自动浇花机中,土壤湿度传感器就是被观察者,观察者就是水泵的开关。需要浇水的时候,水泵就打开。不需要浇水的时候,可以使用喷雾或者待机。

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()

自动浇花机中用到的监听者模式 (Python)_第1张图片

在树莓派上或者是Arduino上,就可以使用这种方法来使用湿度传感器

你可能感兴趣的:(树莓派,Python,设计模式,python,设计模式)