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

工厂模式在 C++ 中核心是把对象的创建过程封装起来,让调用方不直接 new 具体类,而是通过统一接口获取对象。Factory Method(工厂方法)属于创建型模式,它定义一个创建对象的接口,但由子类决定实例化哪个类。
典型 Factory Method 模式包含四部分:
class Shape { public: virtual void draw() = 0; };
class Circle : public Shape { void draw() override { cout <li>
<strong>Creator(抽象工厂)</strong>:声明工厂方法 <code>virtual Product* createProduct() = 0;,不实现具体创建逻辑;class CircleFactory : public Creator { Product* createProduct() override { return new Circle; } };</li></ul><H3>一个可运行的最小示例(C++17)</H3><p>下面代码无依赖、可直接编译运行,体现 Factory Method 的解耦本质:</p><font color="#888"><pre class="brush:php;toolbar:false;">
#include <iostream>
#include <memory>
#include <string>
<p>// 抽象产品
struct Product {
virtual ~Product() = default;
virtual std::string name() const = 0;
};</p><p>// 具体产品 A
struct ConcreteProductA : Product {
std::string name() const override { return "ProductA"; }
};</p><p>// 具体产品 B
struct ConcreteProductB : Product {
std::string name() const override { return "ProductB"; }
};</p><p>// 抽象工厂(Creator)
struct Creator {
// 工厂方法:由子类决定返回哪种产品
virtual std::unique_ptr<Product> create() = 0;
virtual ~Creator() = default;
};</p><p>// 具体工厂 A
struct CreatorA : Creator {
std::unique_ptr<Product> create() override {
return std::make_unique<ConcreteProductA>();
}
};</p><p>// 具体工厂 B
struct CreatorB : Creator {
std::unique_ptr<Product> create() override {
return std::make_unique<ConcreteProductB>();
}
};</p><p>// 使用示例
int main() {
CreatorA factoryA;
auto p1 = factoryA.create();
std::cout << p1->name() << '\n'; // 输出:ProductA</p><pre class='brush:php;toolbar:false;'>CreatorB factoryB;
auto p2 = factoryB.create();
std::cout << p2->name() << '\n'; // 输出:ProductB
return 0;}
立即学习“C++免费学习笔记(深入)”;
现代 C++ 推荐用智能指针管理工厂返回的对象生命周期:
delete 导致内存泄漏或重复释放;
std::unique_ptr 明确所有权,语义清晰;std::shared_ptr,但要评估是否真需要共享;别混淆这几个“工厂”:
ShapeFactory::create("circle")),违反开闭原则;基本上就这些。Factory Method 的价值不在代码多炫,而在把“变”的创建逻辑隔离到子类,让核心业务代码只依赖抽象——改需求时,往往只动工厂子类,不动主流程。
以上就是c++++如何实现工厂模式_c++创建型设计模式Factory Method【源码】的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号