基于C语言实现的观察者模式 以温度监控系统为例

news/2025/3/26 18:26:56/

场景为 温度监控系统:当温度传感器检测到温度变化时,自动通知所有注册的显示器(如LCD、手机App)更新显示。

场景描述

  • 主题(Subject):温度传感器,负责检测温度变化并通知观察者。

  • 观察者(Observer):显示器(LCD显示器、手机App),订阅温度数据并在温度变化时更新显示。

  • 1. 定义观察者接口与结构体 

#include <stdio.h>
#include <stdlib.h>

// 观察者抽象接口(结构体 + 函数指针)
typedef struct Observer {
    void (*update)(struct Observer *self, float temperature);  // 更新函数指针
    void *data;  // 观察者私有数据(如显示器名称)
} Observer;

// 温度传感器(主题)结构体
#define MAX_OBSERVERS 10  // 最大观察者数量
typedef struct {
    Observer *observers[MAX_OBSERVERS];  // 观察者列表
    int num_observers;                   // 当前观察者数量
    float current_temp;        


http://www.ppmy.cn/news/1582779.html

相关文章

深入解析MySQL数据库分库分表技术

友情提示&#xff1a;本文内容由银河易创&#xff08;https://ai.eaigx.com&#xff09;AI创作平台gpt-4-turbo模型生成&#xff0c;仅供参考。 随着互联网应用的快速发展&#xff0c;单一数据库在面对大规模数据时可能会遇到性能瓶颈。因此&#xff0c;数据库分库分表作为一种…

dcat-admin已完成项目部署注意事项

必须 composer update 更新项目php artisan admin:publish 发布dcatadmin的静态资源手动创建目录&#xff08;如果没有&#xff09; storage/appstorage/framework/cachestorage/framework/sessionsstorage/framework/views 需检查 php不要禁用以下函数 putenvsymlinkproc_…

OpenCV旋转估计(3)帮助构建一个最大生成树(Maximum Spanning Tree)函数findMaxSpanningTree()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::detail::findMaxSpanningTree 是 OpenCV 中用于图像拼接工作流的一个函数&#xff0c;它帮助构建一个最大生成树&#xff08;Maximum Spanni…

【Centos7搭建Zabbix4.x监控HCL模拟网络设备:zabbix-server搭建及监控基础05

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 5.zabbix监控HCL模拟网络设备 在保证zabbix-server与HCL网络相通的情况下进行如下操作。 5.1创建主机群 配置-主机群-创建主机群 图 19 取名&#xff0c;添加。 图 20 5.2 创建监控…

国内首家,百度智能云千帆AppBuilder全面兼容MCP协议

百度智能云千帆 AppBuilder 已兼容 MCP 协议&#xff01;作为国内首家支持 MCP 协议的大模型应用开发平台&#xff08;Claude、LangGraph、Cursor、Cline、N8N等海外平台已支持&#xff09;&#xff0c;千帆 AppBuilder 完成兼容后&#xff0c;用户可通过千帆 AppBuilder 轻松调…

游戏引擎学习第178天

回顾和今天的计划 我们正在进行一场直播游戏开发&#xff0c;完全不使用任何引擎或库&#xff0c;所有的代码都由我们自己编写&#xff0c;甚至不调用 GPU。如果你能相信的话。现在&#xff0c;我们正处在调试代码的阶段&#xff0c;决定开始开发一些不错的调试工具&#xff0…

React + Node.js实践 仿B站评论

仿B站评论 效果展示Node.js后端实现模拟网络请求静态结构效果展示代码部分 tab切换排序功能的实现按照热度排序按照时间排序 删除评论功能发布评论功能组件的封装完整代码App.js后端server.js 效果展示 Node.js后端实现模拟网络请求 采用了Express框架来构建服务器&#xff0c…

LeetCode热题100_移动零

给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 /** 移动零* 非0左移&#xff0c;最后补0* *//*public void moveZeroes(int[] nums) {int …