c++如何实现工厂模式_c++创建型设计模式Factory Method【源码】

工厂模式在C++中通过封装对象创建过程,避免调用方直接new具体类;Factory Method模式定义创建接口,由子类决定实例化哪个类,包含抽象产品、具体产品、抽象工厂和具体工厂四部分。

c++如何实现工厂模式_c++创建型设计模式factory method【源码】

工厂模式在 C++ 中核心是把对象的创建过程封装起来,让调用方不直接 new 具体类,而是通过统一接口获取对象。Factory Method(工厂方法)属于创建型模式,它定义一个创建对象的接口,但由子类决定实例化哪个类。

基本结构:抽象工厂 + 具体工厂 + 产品族

典型 Factory Method 模式包含四部分:

Product(抽象产品):定义产品接口,比如 class Shape { public: virtual void draw() = 0; };ConcreteProduct(具体产品):如 class Circle : public Shape { void draw() override { cout

  • Creator(抽象工厂):声明工厂方法 virtual Product* createProduct() = 0;,不实现具体创建逻辑;ConcreteCreator(具体工厂):重写工厂方法,返回对应具体产品,如
    class CircleFactory : public Creator { Product* createProduct() override { return new Circle; } };
  • 一个可运行的最小示例(C++17)

    下面代码无依赖、可直接编译运行,体现 Factory Method 的解耦本质:

    #include #include #include 

    // 抽象产品struct Product {virtual ~Product() = default;virtual std::string name() const = 0;};

    // 具体产品 Astruct ConcreteProductA : Product {std::string name() const override { return "ProductA"; }};

    // 具体产品 Bstruct ConcreteProductB : Product {std::string name() const override { return "ProductB"; }};

    // 抽象工厂(Creator)struct Creator {// 工厂方法:由子类决定返回哪种产品virtual std::unique_ptr create() = 0;virtual ~Creator() = default;};

    // 具体工厂 Astruct CreatorA : Creator {std::unique_ptr create() override {return std::make_unique();}};

    // 具体工厂 Bstruct CreatorB : Creator {std::unique_ptr create() override {return std::make_unique();}};

    // 使用示例int main() {CreatorA factoryA;auto p1 = factoryA.create();std::cout <name() << 'n'; // 输出:ProductA

    CreatorB factoryB;auto p2 = factoryB.create();std::cout <name() << 'n'; // 输出:ProductBreturn 0;

    }

    立即学习“C++免费学习笔记(深入)”;

    为什么用 unique_ptr 而不是 raw pointer?

    现代 C++ 推荐用智能指针管理工厂返回的对象生命周期:

    避免手动 delete 导致内存泄漏或重复释放;std::unique_ptr 明确所有权,语义清晰;若需共享所有权,可用 std::shared_ptr,但要评估是否真需要共享;工厂方法返回值类型统一为智能指针,调用方无需关心析构细节。

    和简单工厂、抽象工厂的区别要点

    别混淆这几个“工厂”:

    简单工厂:不是 GoF 模式,只是一个普通工具类(如 ShapeFactory::create("circle")),违反开闭原则;Factory Method:用继承扩展创建逻辑,新增产品只需加新工厂子类,符合开闭原则;抽象工厂(Abstract Factory):创建“产品族”,比如同时创建 Button + TextBox(Win 系列 / Mac 系列),比 Factory Method 更高层。

    基本上就这些。Factory Method 的价值不在代码多炫,而在把“变”的创建逻辑隔离到子类,让核心业务代码只依赖抽象——改需求时,往往只动工厂子类,不动主流程。

    以上就是c++++如何实现工厂模式_c++创建型设计模式Factory Method【源码】的详细内容,更多请关注创想鸟其它相关文章!

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
    发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1488082.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2025年12月19日 11:14:48
    下一篇 2025年12月19日 11:15:08

    相关推荐

    发表回复

    登录后才能评论
    关注微信