简单工厂通过单一工厂类创建具体产品,适合产品固定的场景;工厂方法利用多态和继承,新增产品无需修改原有代码,更符合开闭原则,适用于需灵活扩展的场合。

工厂模式是一种常见的创建型设计模式,用来解耦对象的创建过程。在C++中,通过基类指针和多态特性可以很好地实现工厂模式。下面介绍一个简单工厂模式和一个更灵活的工厂方法模式的实现方式。
简单工厂模式
简单工厂模式通过一个单独的工厂类来决定创建哪种具体产品。它不是GoF23种设计模式之一,但非常实用。
步骤:
- 定义一个产品基类(抽象接口)
- 派生多个具体产品类
- 创建一个工厂类,提供一个静态方法根据参数生成具体产品
// 产品基类
class Product {
public:
virtual ~Product() = default;
virtual void use() const = 0;
};
// 具体产品A
class ConcreteProductA : public Product {
public:
void use() const override {
std::cout
}
};
// 具体产品B
class ConcreteProductB : public Product {
public:
void use() const override {
std::cout
}
};
// 工厂类
class Factory {
public:
enum ProductType {
TYPE_A,
TYPE_B
};
static std::unique_ptr
createProduct(ProductType type) {
switch (type) {
case TYPE_A:
return std::make_unique();
case TYPE_B:
return std::make_unique();
default:
throw std::invalid_argument("Unknown product type");
}
}
};
// 使用示例
int main() {
auto product = Factory::createProduct(Factory::TYPE_A);
product->use(); // 输出: Using Product A
return 0;
}
工厂方法模式
工厂方法模式将对象的创建延迟到子类,每个子类决定实例化哪一个具体产品。这是GoF正式定义的工厂模式。
立即学习“C++免费学习笔记(深入)”;
结构:
- 定义一个创建对象的接口(虚函数)
- 让子类决定实例化哪个类
// 抽象工厂基类
class Creator {
public:
virtual ~Creator() = default;
virtual std::unique_ptr createProduct() const = 0;
};
// 创建具体产品A的工厂
class ConcreteCreatorA : public Creator {
public:
std::unique_ptr createProduct() const override {
return std::make_unique();
}
};
// 创建具体产品B的工厂
class ConcreteCreatorB : public Creator {
public:
std::unique_ptr createProduct() const override {
return std::make_unique();
}
};
// 使用方式
int main() {
std::unique_ptr creator = std::make_unique();
auto product = creator->createProduct();
product->use(); // 输出: Using Product A
return 0;
}
关键点说明
为何使用智能指针?
使用std::unique_ptr能自动管理内存,避免手动delete,提升安全性和代码清晰度。
多态是核心
基类指针指向派生类对象,通过虚函数调用实际类型的实现,这是工厂模式能工作的基础。
扩展性考虑
简单工厂在新增产品时需要修改工厂代码,违反开闭原则;工厂方法通过新增工厂类即可支持新产品,更符合设计原则。
基本上就这些。两种方式各有用途:简单工厂适合产品种类固定的场景,工厂方法更适合需要灵活扩展的情况。以上就是c++++怎么实现一个工厂模式_工厂设计模式实现的详细内容,更多请关注php中文网其它相关文章!