1. 工厂模式在C++中的核心价值
工厂模式作为创建型设计模式的代表,在C++领域有着不可替代的地位。不同于Java等自带反射机制的语言,C++需要工厂模式来解决对象创建与具体实现的解耦问题。我在大型金融交易系统开发中发现,当系统需要管理300+种订单类型时,如果没有良好的工厂设计,代码很快就会陷入类型判断的泥潭。
现代C++工厂模式已经发展出多种进阶形态。传统简单工厂就像街边快餐店,所有产品都在一个车间生产;标准工厂模式升级为品牌专卖店,每个产品系列有自己的生产线;而抽象工厂则相当于购物中心,提供完整的产品家族。这种演进反映了软件架构从单体到模块化的变迁过程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 经典工厂模式实现剖析
2.1 简单工厂的陷阱与突破
最常见的实现方式是使用字符串标识类型:
cpp复制class ProductFactory {
public:
static Product* create(const std::string& type) {
if(type == "A") return new ConcreteProductA();
if(type == "B") return new ConcreteProductB();
throw std::invalid_argument("Unknown product type");
}
};
这种实现存在三个致命缺陷:
- 违反开闭原则,新增类型需要修改工厂类
- 类型字符串容易拼写错误且难以检查
- 缺乏编译期类型安全检查
改进方案是使用注册机制:
cpp复制class Factory {
using Creator = std::function<std::unique_ptr<Product>()>;
static std::map<std::type_index, Creator> creators_;
public:
template <typename T>
static void registerType() {
creators_[typeid(T)] = []{ return std::make_unique<T>(); };
}
