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

本文介绍了观察者模式的概念及其在自动浇花系统中的应用。通过湿度传感器作为被观察者,当湿度达到一定阈值时,水泵(观察者)自动开启进行浇水。代码示例展示了如何实现这一模式,其中湿度传感器和喷水头分别作为被观察者和观察者进行交互。该模式在物联网设备和嵌入式系统中有着广泛的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

监听者模式

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

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

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

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

image-20201224162748691

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值