当前位置: 首页 > news >正文

扁平化设计网站代码王者荣耀wordpress

扁平化设计网站代码,王者荣耀wordpress,驾校网站建设费用,怎么自己制作网页链接文章目录 C语言适配器模式详解与实践1. 什么是适配器模式?2. 为什么需要适配器模式?3. 实际应用场景4. 代码实现4.1 UML 关系图4.2 头文件 (sensor_adapter.h)4.3 实现文件 (sensor_adapter.c)4.4 使用示例 (main.c) 5. 代码分析5.1 关键设计点5.2 实现特…

文章目录

  • C语言适配器模式详解与实践
    • 1. 什么是适配器模式?
    • 2. 为什么需要适配器模式?
    • 3. 实际应用场景
    • 4. 代码实现
      • 4.1 UML 关系图
      • 4.2 头文件 (sensor_adapter.h)
      • 4.3 实现文件 (sensor_adapter.c)
      • 4.4 使用示例 (main.c)
    • 5. 代码分析
      • 5.1 关键设计点
      • 5.2 实现特点
    • 6. 编译和运行
    • 7. 注意事项
    • 8. 改进建议
    • 9. 总结
    • 参考资料

C语言适配器模式详解与实践

1. 什么是适配器模式?

适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器让原本由于接口不兼容而不能一起工作的类可以协同工作。

2. 为什么需要适配器模式?

  • 兼容不同接口
  • 复用现有代码
  • 统一接口规范
  • 平滑过渡旧系统
  • 整合第三方库

3. 实际应用场景

  • 传感器数据适配
  • 通信协议转换
  • 接口版本兼容
  • 数据格式转换
  • 驱动程序适配

4. 代码实现

4.1 UML 关系图

NewInterface
+process_data()
OldSystem
+old_process()
Adapter
-old_system
+process_data()

4.2 头文件 (sensor_adapter.h)

#ifndef SENSOR_ADAPTER_H
#define SENSOR_ADAPTER_H#include <stdint.h>// 新接口定义的数据结构
typedef struct {float temperature;float humidity;float pressure;uint32_t timestamp;
} SensorData;// 旧系统的数据结构
typedef struct {int16_t temp_raw;      // 原始温度数据int16_t humi_raw;      // 原始湿度数据int16_t pres_raw;      // 原始气压数据uint32_t time;         // 时间戳
} LegacySensorData;// 新接口
typedef struct {void (*process_data)(const SensorData* data);
} NewInterface;// 旧系统接口
typedef struct {void (*old_process)(const LegacySensorData* data);
} OldSystem;// 适配器
typedef struct {NewInterface interface;OldSystem* old_system;
} SensorAdapter;// 创建适配器
SensorAdapter* create_sensor_adapter(OldSystem* old_system);// 销毁适配器
void destroy_sensor_adapter(SensorAdapter* adapter);// 数据转换函数
SensorData convert_sensor_data(const LegacySensorData* old_data);#endif // SENSOR_ADAPTER_H

4.3 实现文件 (sensor_adapter.c)

#include "sensor_adapter.h"
#include <stdio.h>
#include <stdlib.h>// 数据转换实现
SensorData convert_sensor_data(const LegacySensorData* old_data) {SensorData new_data;// 温度转换 (原始数据除以100得到实际温度)new_data.temperature = old_data->temp_raw / 100.0f;// 湿度转换 (原始数据除以100得到实际湿度)new_data.humidity = old_data->humi_raw / 100.0f;// 气压转换 (原始数据除以10得到实际气压)new_data.pressure = old_data->pres_raw / 10.0f;// 时间戳保持不变new_data.timestamp = old_data->time;return new_data;
}// 适配器的处理函数
static void adapter_process_data(const SensorData* data) {// 将新格式数据转换回旧格式LegacySensorData old_data = {.temp_raw = (int16_t)(data->temperature * 100),.humi_raw = (int16_t)(data->humidity * 100),.pres_raw = (int16_t)(data->pressure * 10),.time = data->timestamp};// 获取适配器实例SensorAdapter* adapter = (SensorAdapter*)((char*)data - offsetof(SensorAdapter, interface));// 调用旧系统的处理函数adapter->old_system->old_process(&old_data);
}// 创建适配器
SensorAdapter* create_sensor_adapter(OldSystem* old_system) {SensorAdapter* adapter = (SensorAdapter*)malloc(sizeof(SensorAdapter));adapter->interface.process_data = adapter_process_data;adapter->old_system = old_system;return adapter;
}// 销毁适配器
void destroy_sensor_adapter(SensorAdapter* adapter) {free(adapter);
}

4.4 使用示例 (main.c)

#include "sensor_adapter.h"
#include <stdio.h>// 旧系统的处理函数
static void legacy_process(const LegacySensorData* data) {printf("旧系统处理数据:\n");printf("原始温度: %d (0.01°C)\n", data->temp_raw);printf("原始湿度: %d (0.01%%)\n", data->humi_raw);printf("原始气压: %d (0.1hPa)\n", data->pres_raw);printf("时间戳: %u\n", data->time);
}// 新系统的处理函数
static void new_process(const SensorData* data) {printf("新系统处理数据:\n");printf("温度: %.2f°C\n", data->temperature);printf("湿度: %.2f%%\n", data->humidity);printf("气压: %.1fhPa\n", data->pressure);printf("时间戳: %u\n", data->timestamp);
}int main() {// 创建旧系统OldSystem old_system = {legacy_process};// 创建适配器SensorAdapter* adapter = create_sensor_adapter(&old_system);// 测试数据LegacySensorData legacy_data = {.temp_raw = 2550,    // 25.50°C.humi_raw = 6000,    // 60.00%.pres_raw = 10150,   // 1015.0hPa.time = 1234567890};printf("=== 测试1:旧数据转换为新格式 ===\n");SensorData new_data = convert_sensor_data(&legacy_data);new_process(&new_data);printf("\n=== 测试2:新接口适配到旧系统 ===\n");adapter->interface.process_data(&new_data);// 清理资源destroy_sensor_adapter(adapter);return 0;
}

5. 代码分析

5.1 关键设计点

  1. 接口转换机制
  2. 数据格式转换
  3. 适配器封装
  4. 向后兼容性

5.2 实现特点

  1. 函数指针实现接口
  2. 数据结构转换
  3. 内存管理安全
  4. 使用简单直观

6. 编译和运行

gcc -c sensor_adapter.c -o sensor_adapter.o
gcc -c main.c -o main.o
gcc sensor_adapter.o main.o -o adapter_demo

7. 注意事项

  1. 数据转换精度
  2. 内存管理
  3. 错误处理
  4. 性能开销

8. 改进建议

  1. 添加错误检查
  2. 支持批量数据
  3. 优化转换效率
  4. 添加数据验证

9. 总结

适配器模式通过转换接口,使得原本不兼容的系统能够协同工作。这种模式特别适合系统升级或整合第三方库的场景。

参考资料

  1. 《设计模式:可复用面向对象软件的基础》
  2. 《C语言程序设计》
  3. 《嵌入式系统设计》
http://www.dtcms.com/a/537182.html

相关文章:

  • 新能源汽车故障诊断与排除虚拟实训软件:赋能职业教育利器
  • 微硕WSD40190DN56G 40V N沟MOSFET:汽车48V电动尾翼“190A高速H桥核”
  • 汽车CAN总线系统深度解析:从底层协议到工程实现
  • 两学一做专题网站素材建网站商城有哪些公司
  • android 自定义 dialog 点击空白区域无法关闭
  • 百度新闻源网站有哪些购物系统名称
  • CSP-X 2024 复赛编程题全解(B4104+B4105+B4106+B4107)
  • ARM架构云手机的优点
  • tiny-gpu入门4: ALU模块分析
  • 学做网站论坛vip码锦州宝地建设集团有限公司网站
  • Android15增强型视觉系统(EVS)
  • RK Android14 去除Setting apk顶部标题栏和搜索栏
  • K8s学习笔记(二十三) 网络策略 NetworkPolicy
  • 部门子网站建设方案公司名称大全简单
  • 关于JVM调优,我想聊聊数据和耐心
  • LED显示的一种思路---摄像机思想(学习总结)
  • 2021/12 JLPT听力原文 问题四
  • 算法入门:专题攻克二---滑动窗口(将x减到0的最小操作数,更新中。。。)
  • 如何知道网站是否被k找能做网站的
  • __金仓数据库平替MongoDB实战:医疗手术场景下的国产化替代方案__
  • 深圳有什么网站在html中做网站 视频
  • 比价网站源码整站程序河北省住房城乡建设局网站首页
  • 【从零开始开发远程桌面连接控制工具】02-远程控制服务端实现详解
  • 硬件电路LRC串联谐振分析
  • 做网站卖赚钱吗哪里有免费的网站域名
  • redis主从集群及其原理(优化)
  • 2025年10月27日 AI大事件
  • Logstash 多 Pipeline 配置
  • 网站建设需要注意事项深圳龙华医院网站建设
  • 云栖实录 | 实时计算 Flink 全新升级 - 全栈流处理平台助力实时智能