工厂模式通过基类指针和多态实现对象创建,定义抽象产品类Product及具体类ConcreteProductA,使用智能指针管理生命周期,确保派生类实现use接口。

工厂模式是一种创建型设计模式,用于在不指定具体类的情况下创建对象。在C++中,通过基类指针和多态机制可以很好地实现工厂模式。下面介绍一个简单而实用的工厂模式实现方法。
1. 定义产品基类和具体产品类
首先定义一个抽象的产品基类,提供统一的接口。然后由具体的产品类继承并实现该接口。
- 产品基类通常包含纯虚函数,确保派生类必须实现对应功能
- 使用智能指针(如std::unique_ptr)管理对象生命周期更安全
示例代码:
class Product {
public:
virtual ~Product() = default;
virtual void use() const = 0;
};
class ConcreteProductA : public Product {
public:
void use() const override {
std::cout << "Using Product A\n";
}
};
class ConcreteProductB : public Product {
public:
void use() const override {
std::cout << "Using Product B\n";
}
};
2. 创建工厂类
工厂类提供一个创建对象的方法,根据输入参数决定实例化哪种具体产品。这种方式将对象创建逻辑集中管理,便于扩展和维护。
立即学习“C++免费学习笔记(深入)”;
原本这个程序只是本人两年前初学时练手的,最近拿出来进行了修改,所以叫XmxCms 企业网站管理系统2.0 开发环境:WinXP + VS2008 + SQLServer 2008 + Access开发语言:C#本程序采用 三层架构 + 抽象工厂设计模式 + Linq 实现,目前只做了Access 和 SQL Server ,默认数据库为Access,要更换数据库只需修改web.config 即可
- 工厂方法返回基类指针,调用者无需知道具体类型
- 可使用枚举或字符串作为创建类型的标识
- 添加新产品时只需修改工厂内部逻辑,不影响已有代码
示例代码:
enum class ProductType {
TYPE_A,
TYPE_B
};
class Factory {
public:
static std::unique_ptr createProduct(ProductType type) {
switch (type) {
case ProductType::TYPE_A:
return std::make_unique();
case ProductType::TYPE_B:
return std::make_unique();
default:
throw std::invalid_argument("Unknown product type");
}
}
};
3. 使用工厂创建对象
客户端通过工厂接口获取所需对象,无需直接调用构造函数。这样解耦了对象创建与使用,提升了代码灵活性。
使用示例:
int main() {
auto productA = Factory::createProduct(ProductType::TYPE_A);
auto productB = Factory::createProduct(ProductType::TYPE_B);
productA->use(); // 输出: Using Product A
productB->use(); // 输出: Using Product B
return 0;
}
这种实现方式结构清晰,易于扩展。如果需要支持更多产品类型,只需新增派生类并在工厂中添加对应分支。基本上就这些,不复杂但容易忽略细节。










