抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,用于封装一组具有共同主题的独立对象创建过程。该模式通过提供统一接口创建相关对象家族,而无需指定具体实现类,特别适合需要保证系统组件兼容性的自动驾驶硬件平台适配场景。
在自动驾驶硬件集成中常见的应用场景:
本文以自动驾驶计算平台适配为例进行实现。
#include
#include
// ---------------------------- 抽象产品体系 ----------------------------
// 计算单元接口
class IComputeUnit {
public:
virtual ~IComputeUnit() = default;
virtual void processSensorData() = 0;
virtual float getProcessingPower() const = 0;
};
// 内存管理接口
class IMemoryManager {
public:
virtual ~IMemoryManager() = default;
virtual void allocate(size_t size) = 0;
virtual void release() = 0;
};
// 硬件加速接口
class IHardwareAccelerator {
public:
virtual ~IHardwareAccelerator() = default;
virtual void accelerateAI() = 0;
};
// ---------------------------- 具体产品实现(NVIDIA平台)---------------
class NvidiaGPU : public IComputeUnit {
public:
void processSensorData() override {
std::cout << "[NVIDIA] CUDA加速处理传感器数据" << std::endl;
}
float getProcessingPower() const override {
return 32.8f; // TFLOPS
}
};
class NvidiaMemory : public IMemoryManager {
public:
void allocate(size_t size) override {
std::cout << "[NVIDIA] 使用CUDA统一内存分配" << size << "MB" << std::endl;
}
void release() override {
std::cout << "[NVIDIA] 释放CUDA内存" << std::endl;
}
};
class TensorRTAccelerator : public IHardwareAccelerator {
public:
void accelerateAI() override {
std::cout << "[TensorRT] 启动深度学习推理加速" << std::endl;
}
};
// ---------------------------- 具体产品实现(华为MDC平台)---------------
class HuaweiNPU : public IComputeUnit {
public:
void processSensorData() override {
std::cout << "[华为MDC] 昇腾芯片处理传感器数据" << std::endl;
}
float getProcessingPower() const override {
return 28.5f; // TFLOPS
}
};
class HuaweiMemory : public IMemoryManager {
public:
void allocate(size_t size) override {
std::cout << "[华为MDC] 分配DDR内存" << size << "MB" << std::endl;
}
void release() override {
std::cout << "[华为MDC] 释放DDR内存" << std::endl;
}
};
class MindSporeAccelerator : public IHardwareAccelerator {
public:
void accelerateAI() override {
std::cout << "[MindSpore] 启动AI模型推理" << std::endl;
}
};
// ---------------------------- 抽象工厂接口 ----------------------------
class IHardwareFactory {
public:
virtual ~IHardwareFactory() = default;
virtual std::unique_ptr<IComputeUnit> createComputeUnit() = 0;
virtual std::unique_ptr<IMemoryManager> createMemoryManager() = 0;
virtual std::unique_ptr<IHardwareAccelerator> createAccelerator() = 0;
};
// ---------------------------- 具体工厂实现 ----------------------------
class NvidiaFactory : public IHardwareFactory {
public:
std::unique_ptr<IComputeUnit> createComputeUnit() override {
return std::make_unique<NvidiaGPU>();
}
std::unique_ptr<IMemoryManager> createMemoryManager() override {
return std::make_unique<NvidiaMemory>();
}
std::unique_ptr<IHardwareAccelerator> createAccelerator() override {
return std::make_unique<TensorRTAccelerator>();
}
};
class HuaweiFactory : public IHardwareFactory {
public:
std::unique_ptr<IComputeUnit> createComputeUnit() override {
return std::make_unique<HuaweiNPU>();
}
std::unique_ptr<IMemoryManager> createMemoryManager() override {
return std::make_unique<HuaweiMemory>();
}
std::unique_ptr<IHardwareAccelerator> createAccelerator() override {
return std::make_unique<MindSporeAccelerator>();
}
};
// ---------------------------- 系统集成 ----------------------------
class AutonomousSystem {
std::unique_ptr<IHardwareFactory> factory_;
std::unique_ptr<IComputeUnit> compute_;
std::unique_ptr<IMemoryManager> memory_;
std::unique_ptr<IHardwareAccelerator> accelerator_;
public:
explicit AutonomousSystem(std::unique_ptr<IHardwareFactory> factory)
: factory_(std::move(factory)) {
initialize();
}
void initialize() {
compute_ = factory_->createComputeUnit();
memory_ = factory_->createMemoryManager();
accelerator_ = factory_->createAccelerator();
}
void run() {
std::cout << "\n=== 启动自动驾驶系统 ===" << std::endl;
memory_->allocate(4096); // 分配4GB内存
compute_->processSensorData();
accelerator_->accelerateAI();
std::cout << "计算性能: " << compute_->getProcessingPower() << " TFLOPS\n";
}
~AutonomousSystem() {
memory_->release();
}
};
// ---------------------------- 场景演示 ----------------------------
int main() {
// 创建NVIDIA平台系统
AutonomousSystem nvidiaSystem(std::make_unique<NvidiaFactory>());
nvidiaSystem.run();
// 创建华为平台系统
AutonomousSystem huaweiSystem(std::make_unique<HuaweiFactory>());
huaweiSystem.run();
return 0;
}
class IComputeUnit { /*...*/ }; // 抽象产品
class NvidiaGPU : public IComputeUnit { /*...*/ }; // 具体产品
class IHardwareFactory { /*...*/ }; // 抽象工厂
class NvidiaFactory : public IHardwareFactory { /*...*/ }; // 具体工厂
class AutonomousSystem {
void initialize() {
compute_ = factory_->createComputeUnit();
// 创建其他组件...
}
};
=== 启动自动驾驶系统 ===
[NVIDIA] 使用CUDA统一内存分配4096MB
[NVIDIA] CUDA加速处理传感器数据
[TensorRT] 启动深度学习推理加速
计算性能: 32.8 TFLOPS
=== 启动自动驾驶系统 ===
[华为MDC] 分配DDR内存4096MB
[华为MDC] 昇腾芯片处理传感器数据
[MindSpore] 启动AI模型推理
计算性能: 28.5 TFLOPS
平台兼容性
组件一致性
可维护性
std::unique_ptr<IHardwareFactory> createFactory(const PlatformConfig& config) {
if(config.platform == "NVIDIA") return std::make_unique<NvidiaFactory>();
// 其他平台判断...
}
class HybridFactory : public IHardwareFactory {
// 组合不同厂商组件(需保证兼容性)
};
class MonitoredMemory : public IMemoryManager {
// 添加内存使用监控功能
};
核心价值:
适用场景:
本实现展示了抽象工厂模式在自动驾驶硬件集成中的典型应用,通过严格的产品家族管理和接口标准化,为构建可移植、易扩展的自动驾驶系统提供了可靠的架构基础。