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;
}

代码解释:

  1. #include <iostream>: 包含输入输出流的头文件,用于输入输出操作。
  2. using namespace std;: 使用标准命名空间,这样就可以直接使用 std 命名空间中定义的标识符,而不需要加上 std:: 前缀。
  3. class Product: 定义了一个名为 Product 的基类。
  4. virtual ~Product() {}: 定义了一个虚析构函数,用于释放派生类对象的内存。虚析构函数在派生类对象被删除时会被自动调用。
  5. virtual void operation() = 0;: 定义了一个纯虚函数 operation(),没有实现。纯虚函数是在基类中声明的虚函数,要求任何派生类都必须实现这个函数。
  6. class Xiaomi : public Product: 定义了一个名为 Xiaomi 的派生类,继承自 Product 基类。
  7. virtual void operation(): 实现基类中的纯虚函数 operation()。输出 'opt xiaomi'。
  8. class Huawei : public Product: 定义了一个名为 Huawei 的派生类,继承自 Product 基类。
  9. virtual void operation(): 实现基类中的纯虚函数 operation()。输出 'opt huawei'。
  10. enum ProType { XIAOMI, HUAWEI };: 定义了一个枚举类型 ProType,包含了两个枚举值 XIAOMI 和 HUAWEI。
  11. class Factory: 定义了一个名为 Factory 的类。
  12. Product *createProduct(ProType type): 定义了一个函数 createProduct,根据传入的 ProType 类型参数创建对应的 Product 对象,并返回指向 Product 的指针。
  13. switch (type): 根据传入的 ProType 类型参数 type 进行选择。
  14. case XIAOMI:: 如果 type 的值为 XIAOMI,则执行以下语句。
  15. return new Xiaomi;: 返回一个指向 Xiaomi 对象的指针。
  16. case HUAWEI:: 如果 type 的值为 HUAWEI,则执行以下语句。
  17. return new Huawei;: 返回一个指向 Huawei 对象的指针。
  18. default:: 如果 type 的值不是 XIAOMI 或 HUAWEI,则执行以下语句。
  19. return nullptr;: 返回空指针。
  20. Factory fac;: 创建一个 Factory 对象 fac。
  21. Product *pro = fac.createProduct(HUAWEI);: 调用 fac 对象的 createProduct 函数,传入 HUAWEI 作为参数,返回一个指向 Product 对象的指针。
  22. pro->operation();: 调用 pro 指针指向的对象的 operation 函数,输出 'opt huawei'。
  23. return 0;: 返回 0,表示程序正常结束。

总结

本示例展示了使用工厂模式创建不同产品对象的简单实现,通过虚函数和枚举类型,我们可以根据需要动态创建不同的产品实例,提高代码的可扩展性和可维护性。

C++ 工厂模式示例:创建 Xiaomi 和 Huawei 产品

原文地址: https://www.cveoy.top/t/topic/qyfl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录