在智能家居系统中,温度传感器作为被观察对象(Subject),当其检测到温度变化时,需**自动通知多个依赖设备*

C. 观察者模式 ✅(一对多状态通知)

理由:在智能家居系统中,温度传感器作为被观察对象(Subject),当其检测到温度变化时,需自动通知多个依赖设备(如空调、加湿器、风扇、报警器等)进行响应。观察者模式正适用于这种“一对多”的松耦合事件通知机制——传感器无需知道具体有哪些设备,只需发布状态变更;各设备(观察者)自行注册并实现更新逻辑,实现解耦、可扩展和实时响应。

其他选项分析:

  • A. 策略模式:用于封装可互换的算法(如不同温控策略),不解决“状态变化通知”问题;
  • B. 工厂模式:用于对象创建,与运行时动态响应无关;
  • D. 单例模式:仅保证全局唯一实例,无法处理多组件间的联动通知。
# 观察者模式简例(Python)
from abc import ABC, abstractmethod

class Observer(ABC):
    @abstractmethod
    def update(self, temperature: float): pass

class AirConditioner(Observer):
    def update(self, temperature: float):
        if temperature > 28: print("空调启动制冷")

class Humidifier(Observer):
    def update(self, temperature: float):
        if temperature < 40: print("加湿器启动加湿")

class TemperatureSensor:
    def __init__(self):
        self._observers = []
        self._temp = None

    def attach(self, observer: Observer):
        self._observers.append(observer)

    def set_temperature(self, temp: float):
        self._temp = temp
        for obs in self._observers:
            obs.update(temp)

# 使用示例
sensor = TemperatureSensor()
sensor.attach(AirConditioner())
sensor.attach(Humidifier())
sensor.set_temperature(30)  # → 空调启动制冷;加湿器启动加湿(按逻辑条件触发)

观察者模式(Observer Pattern)与发布-订阅模式(Pub/Sub)在表层目标一致(解耦事件发布者与消费者),但核心架构与职责分离程度存在本质区别

核心区别

维度观察者模式发布-订阅模式
耦合方式Subject(被观察者)直接持有并调用 Observer 列表(内存内、同步调用)Publisher 与 Subscriber 完全解耦,通过中间消息代理(Broker/Event Bus) 通信
依赖关系Observer 需主动向 Subject 注册(subject.attach(observer)),Subject 知道 Observer 存在Publisher 和 Subscriber 互不知晓对方,仅依赖 Broker 的主题(Topic)或事件类型
通信时机通常同步执行(通知即调用),阻塞发布者流程多为异步、可缓冲、可持久化(如消息队列),支持离线订阅、重试、广播/组播
实现粒度面向对象层级,常用于单进程内模块间通信架构层级,常跨进程、跨服务、跨网络(如 MQTT、RabbitMQ、Redis Pub/Sub)

🔍 智能家居中是否可互换?
不可简单互换,需按场景选型

  • 小规模本地系统(如树莓派+ESP32组成的家庭网关,所有设备在同一局域网/单机运行):观察者模式足够轻量、低延迟、易调试,适合快速原型开发;
  • 规模化、高可靠、多终端场景(如接入云平台、手机App远程控制、第三方IoT设备接入、断网续传需求):必须使用发布-订阅模式——它天然支持设备动态上下线、网络分区容忍、事件回溯、权限隔离(如 home/livingroom/temperature 主题)、以及与工业标准(MQTT/CoAP)无缝集成。

💡 补充说明:
许多现代框架(如 Python 的 blinker、JavaScript 的 EventEmitter)名义上叫“观察者”,实则已融合 Pub/Sub 特性(如基于字符串 topic 的注册);而 Spring Event 或 Android LiveData 虽称“观察者”,本质是进程内同步观察者。真正的 Pub/Sub 一定引入了中介者角色(Broker),这是区分二者最关键的“架构签名”。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bol5261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值