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

OpenBMC适配器模式小白学习指南

一、适配器模式一句话理解

把一个类的接口转换成客户端期望的另一种接口,让原本不兼容的类可以一起工作。

二、OpenBMC中最简单的适配器示例

场景:旧温度传感器适配新接口

// 新系统需要的接口(目标接口)
class NewSensor {
public:virtual float read() = 0;  // 返回摄氏度
};// 旧传感器实现(被适配者)
class OldSensor {
public:int getTemp() { return 45; } // 返回整型温度值
};// 适配器类
class SensorAdapter : public NewSensor {
private:OldSensor oldSensor;
public:float read() override {// 将int转换为floatreturn static_cast<float>(oldSensor.getTemp());}
};

使用方式

int main() {SensorAdapter adapter;cout << "当前温度: " << adapter.read() << "℃" << endl;return 0;
}

三、OpenBMC中实际应用流程

1. 识别不兼容的接口

  • 新接口:getValue(): double
  • 旧实现:read_temp(): int

2. 创建适配器类

class TempSensorAdapter : public SensorInterface {LegacyTempSensor legacySensor;
public:double getValue() override {return static_cast<double>(legacySensor.read_temp());}
};

3. 在工厂中使用

unique_ptr<SensorInterface> createSensor(string type) {if (type == "legacy") {return make_unique<TempSensorAdapter>();}// 其他传感器类型...
}

四、适配器模式三大好处

  1. 兼容旧代码:不改动原有类的情况下使用
  2. 单一职责:接口转换逻辑独立在适配器中
  3. 开闭原则:可以随时新增适配器而不影响客户端

五、什么时候用适配器模式?

✅ 需要将旧组件集成到新系统
✅ 需要使用不兼容接口的第三方库
✅ 需要统一多个类似但接口不同的类

六、真实案例:D-Bus接口适配

// 新D-Bus接口
class DBusSensor {
public:virtual string getProperty(string name) = 0;
};// 旧实现
class SysfsSensor {
public:char read_property(const char* name);
};// 适配器
class SysfsToDBusAdapter : public DBusSensor {SysfsSensor sensor;
public:string getProperty(string name) override {return string(sensor.read_property(name.c_str()));}
};

记住这个模式的本质:加个中间层,解决接口不匹配问题。在OpenBMC这种需要长期维护的嵌入式系统中,适配器模式能大大降低系统演进的成本。

http://www.lryc.cn/news/619914.html

相关文章:

  • 服务器安全检测和防御技术
  • LeetCode算法日记 - Day 10: x 的平方根、搜索插入位置
  • 大模型微调【1】之入门
  • 农业物联网:现代农业的智慧革命
  • 后端(服务端)的跳转方式-请求转发和重定向
  • 集成电路学习:什么是CV计算机视觉
  • Nginx学习笔记(七)——Nginx负载均衡
  • 深度学习之CNN网络简介
  • 深度学习(4):数据加载器
  • go语言学习笔记
  • 初识神经网络05——构建神经网络3
  • C# 反射入门:如何获取 Type 对象?
  • 深度学习流体力学:基于PyTorch的物理信息神经网络(PINN)完整实现
  • Spring Boot项目通过Feign调用三方接口的详细教程
  • 力扣top100(day02-04)--二叉树 01
  • 阿里云Anolis OS 8.6的公有云仓库源配置步骤
  • 旧版MinIO的安装(windows)、Spring Boot 后端集成 MinIO 实现文件存储(超详细,带图文)
  • oss(阿里云)前端直传
  • 4G模块 ML307A通过MQTT协议连接到阿里云
  • ImportError: Encountered error: Failed to import NATTEN‘s CPP backend.
  • 事件处理与组件基础
  • 飞算JavaAI实现数据库交互:JPA/Hibernate + MyBatis Plus基础功能学习
  • 基于微信小程序的工作日报管理系统/基于asp.net的工作日报管理系统
  • CAD 的 C# 开发中,对多段线(封闭多边形)内部的点进行 “一笔连线且不交叉、不出界
  • 重生之我在公司写前端 | “博灵语音通知终端” | 登录页面
  • [量化交易](1获取加密货币的交易数据)
  • 01数据结构-Prim算法
  • Unity、C#常用的时间处理类
  • Gradle(三)创建一个 SpringBoot 项目
  • C++ 中构造函数参数对父对象的影响:父子控件管理机制解析