C++ 工厂模式示例:创建 Xiaomi 和 Huawei 产品
C++ 工厂模式示例:创建 Xiaomi 和 Huawei 产品
本示例演示了 C++ 中的工厂模式,通过工厂类创建不同的产品对象 (Xiaomi 和 Huawei),并展示了使用虚函数和枚举类型实现动态创建不同产品实例的功能。
#include <iostream>
using namespace std;
class Product // 基类
{
public:
virtual ~Product() {} // 虚析构函数,用于释放派生类对象的内存
virtual void operation() = 0; // 纯虚函数
};
class Xiaomi : public Product // 具体类
{
public:
virtual void operation() { // 实现基类中的纯虚函数
cout << 'opt xiaomi' << endl;
}
};
class Huawei : public Product // 具体类
{
public:
virtual void operation() {
cout << 'opt huawei' << endl;
}
};
enum ProType { XIAOMI, HUAWEI }; // 枚举类型 ProType,包含了两个枚举值 XIAOMI 和 HUAWEI。
class Factory
{
public:
Product *createProduct(ProType type) { // 根据传入的 ProType 类型参数创建对应的 Product 对象
switch (type) {
case XIAOMI:
return new Xiaomi;
case HUAWEI:
return new Huawei;
default:
return nullptr;
}
}
};
int main()
{
Factory fac;
// Product *pro = fac.createProduct(XIAOMI);
Product *pro = fac.createProduct(HUAWEI);
pro->operation(); // 调用
return 0;
}
代码解释:
#include <iostream>: 包含输入输出流的头文件,用于输入输出操作。using namespace std;: 使用标准命名空间,这样就可以直接使用 std 命名空间中定义的标识符,而不需要加上 std:: 前缀。class Product: 定义了一个名为 Product 的基类。virtual ~Product() {}: 定义了一个虚析构函数,用于释放派生类对象的内存。虚析构函数在派生类对象被删除时会被自动调用。virtual void operation() = 0;: 定义了一个纯虚函数 operation(),没有实现。纯虚函数是在基类中声明的虚函数,要求任何派生类都必须实现这个函数。class Xiaomi : public Product: 定义了一个名为 Xiaomi 的派生类,继承自 Product 基类。virtual void operation(): 实现基类中的纯虚函数 operation()。输出 'opt xiaomi'。class Huawei : public Product: 定义了一个名为 Huawei 的派生类,继承自 Product 基类。virtual void operation(): 实现基类中的纯虚函数 operation()。输出 'opt huawei'。enum ProType { XIAOMI, HUAWEI };: 定义了一个枚举类型 ProType,包含了两个枚举值 XIAOMI 和 HUAWEI。class Factory: 定义了一个名为 Factory 的类。Product *createProduct(ProType type): 定义了一个函数 createProduct,根据传入的 ProType 类型参数创建对应的 Product 对象,并返回指向 Product 的指针。switch (type): 根据传入的 ProType 类型参数 type 进行选择。case XIAOMI:: 如果 type 的值为 XIAOMI,则执行以下语句。return new Xiaomi;: 返回一个指向 Xiaomi 对象的指针。case HUAWEI:: 如果 type 的值为 HUAWEI,则执行以下语句。return new Huawei;: 返回一个指向 Huawei 对象的指针。default:: 如果 type 的值不是 XIAOMI 或 HUAWEI,则执行以下语句。return nullptr;: 返回空指针。Factory fac;: 创建一个 Factory 对象 fac。Product *pro = fac.createProduct(HUAWEI);: 调用 fac 对象的 createProduct 函数,传入 HUAWEI 作为参数,返回一个指向 Product 对象的指针。pro->operation();: 调用 pro 指针指向的对象的 operation 函数,输出 'opt huawei'。return 0;: 返回 0,表示程序正常结束。
总结
本示例展示了使用工厂模式创建不同产品对象的简单实现,通过虚函数和枚举类型,我们可以根据需要动态创建不同的产品实例,提高代码的可扩展性和可维护性。
原文地址: https://www.cveoy.top/t/topic/qyfl 著作权归作者所有。请勿转载和采集!