工厂模式通过将“new具体类”移至独立工厂中实现创建解耦,调用方仅依赖抽象接口;简单工厂用静态函数按参数返回智能指针封装的子类对象,要求基类有虚析构函数。
工厂模式在C++中主要解决对象创建的解耦问题,核心是把“new具体类”的动作移到一个独立的工厂类或函数中,让调用方只依赖抽象接口,不关心具体类型如何构造。
用一个静态工厂函数根据参数返回不
同子类对象,适合产品种类少、变化不频繁的场景。
关键点:返回智能指针避免内存泄漏;基类需有虚析构函数。
示例片段:
class Shape { public: virtual ~Shape() = default; virtual void draw() const = 0; };定义一个创建对象的虚函数(工厂方法),由子类决定实例化哪个类。适用于产品族扩展频繁、需要支持多种产品系列的场景。
关键点:工厂基类声明纯虚工厂方法;每个具体工厂子类实现该方法,返回对应具体产品。
好处是新增产品系列只需加新工厂子类,不修改现有代码,符合开闭原则。
避免裸new,统一用std::make_unique或std::make_shared;用enum class替代字符串参数提升类型安全;结合模板工厂减少重复代码(如template
若产品构造参数复杂,可配合Builder模式预配置对象再交由工厂组装。
工厂类本身不应承担业务逻辑,只专注创建;避免工厂方法中出现多重条件嵌套,可考虑用映射表(std::map<:string creatorfunc>)替代硬编码分支;多线程环境*意工厂函数的线程安全性,必要时加锁或使用线程局部存储。