抽象工厂模式及其在自动驾驶中的应用举例(c++代码实现) ...

打印 上一主题 下一主题

主题 1732|帖子 1732|积分 5196

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
模式定义

抽象工厂模式(Abstract Factory Pattern)是一种创建型计划模式,用于封装一组具有共同主题的独立对象创建过程。该模式通过提供统一接口创建相关对象家属,而无需指定具体实现类,特殊得当必要保证体系组件兼容性的自动驾驶硬件平台适配场景。

自动驾驶应用场景

在自动驾驶硬件集成中常见的应用场景:

  • 多传感器套件适配:兼容不同厂商的LiDAR+Camera+Radar组合
  • 硬件平台移植:适配不同盘算平台(NVIDIA vs 华为MDC)
  • 仿真体系切换:切换真实硬件与仿真传感器组件
本文以自动驾驶盘算平台适配为例举行实现。

C++代码实现(含详细解释)

  1. #include <iostream>
  2. #include <memory>
  3. // ---------------------------- 抽象产品体系 ----------------------------
  4. // 计算单元接口
  5. class IComputeUnit {
  6. public:
  7.     virtual ~IComputeUnit() = default;
  8.     virtual void processSensorData() = 0;
  9.     virtual float getProcessingPower() const = 0;
  10. };
  11. // 内存管理接口
  12. class IMemoryManager {
  13. public:
  14.     virtual ~IMemoryManager() = default;
  15.     virtual void allocate(size_t size) = 0;
  16.     virtual void release() = 0;
  17. };
  18. // 硬件加速接口
  19. class IHardwareAccelerator {
  20. public:
  21.     virtual ~IHardwareAccelerator() = default;
  22.     virtual void accelerateAI() = 0;
  23. };
  24. // ---------------------------- 具体产品实现(NVIDIA平台)---------------
  25. class NvidiaGPU : public IComputeUnit {
  26. public:
  27.     void processSensorData() override {
  28.         std::cout << "[NVIDIA] CUDA加速处理传感器数据" << std::endl;
  29.     }
  30.     float getProcessingPower() const override {
  31.         return 32.8f;  // TFLOPS
  32.     }
  33. };
  34. class NvidiaMemory : public IMemoryManager {
  35. public:
  36.     void allocate(size_t size) override {
  37.         std::cout << "[NVIDIA] 使用CUDA统一内存分配" << size << "MB" << std::endl;
  38.     }
  39.     void release() override {
  40.         std::cout << "[NVIDIA] 释放CUDA内存" << std::endl;
  41.     }
  42. };
  43. class TensorRTAccelerator : public IHardwareAccelerator {
  44. public:
  45.     void accelerateAI() override {
  46.         std::cout << "[TensorRT] 启动深度学习推理加速" << std::endl;
  47.     }
  48. };
  49. // ---------------------------- 具体产品实现(华为MDC平台)---------------
  50. class HuaweiNPU : public IComputeUnit {
  51. public:
  52.     void processSensorData() override {
  53.         std::cout << "[华为MDC] 昇腾芯片处理传感器数据" << std::endl;
  54.     }
  55.     float getProcessingPower() const override {
  56.         return 28.5f;  // TFLOPS
  57.     }
  58. };
  59. class HuaweiMemory : public IMemoryManager {
  60. public:
  61.     void allocate(size_t size) override {
  62.         std::cout << "[华为MDC] 分配DDR内存" << size << "MB" << std::endl;
  63.     }
  64.     void release() override {
  65.         std::cout << "[华为MDC] 释放DDR内存" << std::endl;
  66.     }
  67. };
  68. class MindSporeAccelerator : public IHardwareAccelerator {
  69. public:
  70.     void accelerateAI() override {
  71.         std::cout << "[MindSpore] 启动AI模型推理" << std::endl;
  72.     }
  73. };
  74. // ---------------------------- 抽象工厂接口 ----------------------------
  75. class IHardwareFactory {
  76. public:
  77.     virtual ~IHardwareFactory() = default;
  78.    
  79.     virtual std::unique_ptr<IComputeUnit> createComputeUnit() = 0;
  80.     virtual std::unique_ptr<IMemoryManager> createMemoryManager() = 0;
  81.     virtual std::unique_ptr<IHardwareAccelerator> createAccelerator() = 0;
  82. };
  83. // ---------------------------- 具体工厂实现 ----------------------------
  84. class NvidiaFactory : public IHardwareFactory {
  85. public:
  86.     std::unique_ptr<IComputeUnit> createComputeUnit() override {
  87.         return std::make_unique<NvidiaGPU>();
  88.     }
  89.     std::unique_ptr<IMemoryManager> createMemoryManager() override {
  90.         return std::make_unique<NvidiaMemory>();
  91.     }
  92.     std::unique_ptr<IHardwareAccelerator> createAccelerator() override {
  93.         return std::make_unique<TensorRTAccelerator>();
  94.     }
  95. };
  96. class HuaweiFactory : public IHardwareFactory {
  97. public:
  98.     std::unique_ptr<IComputeUnit> createComputeUnit() override {
  99.         return std::make_unique<HuaweiNPU>();
  100.     }
  101.     std::unique_ptr<IMemoryManager> createMemoryManager() override {
  102.         return std::make_unique<HuaweiMemory>();
  103.     }
  104.     std::unique_ptr<IHardwareAccelerator> createAccelerator() override {
  105.         return std::make_unique<MindSporeAccelerator>();
  106.     }
  107. };
  108. // ---------------------------- 系统集成 ----------------------------
  109. class AutonomousSystem {
  110.     std::unique_ptr<IHardwareFactory> factory_;
  111.    
  112.     std::unique_ptr<IComputeUnit> compute_;
  113.     std::unique_ptr<IMemoryManager> memory_;
  114.     std::unique_ptr<IHardwareAccelerator> accelerator_;
  115. public:
  116.     explicit AutonomousSystem(std::unique_ptr<IHardwareFactory> factory)
  117.         : factory_(std::move(factory)) {
  118.         initialize();
  119.     }
  120.     void initialize() {
  121.         compute_ = factory_->createComputeUnit();
  122.         memory_ = factory_->createMemoryManager();
  123.         accelerator_ = factory_->createAccelerator();
  124.     }
  125.     void run() {
  126.         std::cout << "\n=== 启动自动驾驶系统 ===" << std::endl;
  127.         memory_->allocate(4096);  // 分配4GB内存
  128.         compute_->processSensorData();
  129.         accelerator_->accelerateAI();
  130.         std::cout << "计算性能: " << compute_->getProcessingPower() << " TFLOPS\n";
  131.     }
  132.     ~AutonomousSystem() {
  133.         memory_->release();
  134.     }
  135. };
  136. // ---------------------------- 场景演示 ----------------------------
  137. int main() {
  138.     // 创建NVIDIA平台系统
  139.     AutonomousSystem nvidiaSystem(std::make_unique<NvidiaFactory>());
  140.     nvidiaSystem.run();
  141.     // 创建华为平台系统
  142.     AutonomousSystem huaweiSystem(std::make_unique<HuaweiFactory>());
  143.     huaweiSystem.run();
  144.     return 0;
  145. }
复制代码

代码解析

1. 产品体系计划

  1. class IComputeUnit { /*...*/ };  // 抽象产品
  2. class NvidiaGPU : public IComputeUnit { /*...*/ };  // 具体产品
复制代码


  • 接口隔离:每个硬件组件定义独立接口
  • 多态支持:统一接口访问不同平台实现
2. 工厂体系实现

  1. class IHardwareFactory { /*...*/ };  // 抽象工厂
  2. class NvidiaFactory : public IHardwareFactory { /*...*/ };  // 具体工厂
复制代码


  • 家属封装:每个工厂生产配套硬件组件
  • 兼容保证:确保同一工厂创建的组件可协同工作
3. 体系集成

  1. class AutonomousSystem {
  2.     void initialize() {
  3.         compute_ = factory_->createComputeUnit();
  4.         // 创建其他组件...
  5.     }
  6. };
复制代码


  • 依靠注入:通过构造函数传入具体工厂
  • 统一生命周期:智能指针自动管理组件

运行结果

  1. === 启动自动驾驶系统 ===
  2. [NVIDIA] 使用CUDA统一内存分配4096MB
  3. [NVIDIA] CUDA加速处理传感器数据
  4. [TensorRT] 启动深度学习推理加速
  5. 计算性能: 32.8 TFLOPS
  6. === 启动自动驾驶系统 ===
  7. [华为MDC] 分配DDR内存4096MB
  8. [华为MDC] 昇腾芯片处理传感器数据
  9. [MindSpore] 启动AI模型推理
  10. 计算性能: 28.5 TFLOPS
复制代码

模式优势分析

在自动驾驶中的价值


  • 平台兼容性

    • 确保盘算单元+内存管理+加快器的硬件兼容
    • 快速切换硬件平台(更换工厂即可)

  • 组件一致性

    • 防止混用不同平台组件(如NVIDIA加快器配华为内存)
    • 尺度化硬件访问接口

  • 可维护性

    • 新增硬件平台只需扩展工厂和产品类
    • 核心业务逻辑保持稳定


扩展改进发起

1. 动态配置加载

  1. std::unique_ptr<IHardwareFactory> createFactory(const PlatformConfig& config) {
  2.     if(config.platform == "NVIDIA") return std::make_unique<NvidiaFactory>();
  3.     // 其他平台判断...
  4. }
复制代码
2. 混合硬件支持

  1. class HybridFactory : public IHardwareFactory {
  2.     // 组合不同厂商组件(需保证兼容性)
  3. };
复制代码
3. 资源监控

  1. class MonitoredMemory : public IMemoryManager {
  2.     // 添加内存使用监控功能
  3. };
复制代码

抽象工厂模式总结

核心价值


  • 封装相关对象创建过程
  • 确保产品家属兼容性
  • 提高体系可配置性
适用场景


  • 自动驾驶多硬件平台适配
  • 传感器套件兼容性保障
  • 仿真体系与真实体系切换
本实现展示了抽象工厂模式在自动驾驶硬件集成中的典型应用,通过严酷的产品家属管理和接口尺度化,为构建可移植、易扩展的自动驾驶体系提供了可靠的架构底子。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表