C++ 工厂模式

8.9.2 工厂模式

对类实例化的过程提供一层static函数封装, 本质上等价于类指针;

使用步骤:

//第一步,定义一个抽象产品类
class Product {
public:
    virtual void operation() = 0;
};

//第二步,实现具体产品类
class ConcreteProductA : public Product {
public:
    void operation() override {
        // 具体产品A的操作实现
    }
};

class ConcreteProductB : public Product {
public:
    void operation() override {
        // 具体产品B的操作实现
    }
};

//第三步,工厂类
class Factory {
public:
    // 工厂方法,根据不同的条件创建不同的具体产品对象
    static Product* createProduct(std::string type) {
        if (type == "A") {
            return new ConcreteProductA();
        } else if (type == "B") {
            return new ConcreteProductB();
        } else {
            return nullptr;
        }
    }
};

示例代码:

#include <iostream>
#include <string>

// 抽象产品类
class Product {
public:
    virtual void operation() = 0;
};

// 具体产品类A
class ConcreteProductA : public Product {
public:
    void operation() override {
        std::cout << "ConcreteProductA operation." << std::endl;
    }
};

// 具体产品类B
class ConcreteProductB : public Product {
public:
    void operation() override {
        std::cout << "ConcreteProductB operation." << std::endl;
    }
};

// 工厂类
class Factory {
public:
    // 工厂方法,根据输入参数创建具体产品对象
    static Product* createProduct(std::string type) {
        if (type == "A") {
            return new ConcreteProductA();
        } else if (type == "B") {
            return new ConcreteProductB();
        } else {
            return nullptr;
        }
    }
};

int main() {
    // 使用工厂类创建产品对象
    Product* productA = Factory::createProduct("A");
    if (productA) {
        productA->operation();  // 输出:ConcreteProductA operation.
    }

    Product* productB = Factory::createProduct("B");
    if (productB) {
        productB->operation();  // 输出:ConcreteProductB operation.
    }

    delete productA;
    delete productB;

    return 0;
}

相关推荐

  1. [C/C++] -- 工厂模式

    2024-03-18 21:38:01       32 阅读
  2. C++设计模式--工厂模式

    2024-03-18 21:38:01       43 阅读
  3. C++设计模式---工厂模式

    2024-03-18 21:38:01       23 阅读
  4. C++ 工厂模式

    2024-03-18 21:38:01       42 阅读
  5. C++工厂模式

    2024-03-18 21:38:01       31 阅读
  6. 工厂方法模式-C#实现

    2024-03-18 21:38:01       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-18 21:38:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-18 21:38:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-18 21:38:01       82 阅读
  4. Python语言-面向对象

    2024-03-18 21:38:01       91 阅读

热门阅读

  1. 【P5737】【深基7.例3】闰年展示

    2024-03-18 21:38:01       39 阅读
  2. C++不定参数模板、折叠表达式和类型推导

    2024-03-18 21:38:01       44 阅读
  3. 七.pandas处理第三方数据

    2024-03-18 21:38:01       35 阅读
  4. react中点击按钮不能获取最新的state时候

    2024-03-18 21:38:01       44 阅读
  5. 大模型学习中,为什么要把AI当人看?

    2024-03-18 21:38:01       50 阅读
  6. server.servlet.path和#server.servlet.context-path的区别

    2024-03-18 21:38:01       45 阅读
  7. 【C#语言入门】19. 什么是类

    2024-03-18 21:38:01       38 阅读
  8. 使用TOPDN做L53免费域名DNS解析方法

    2024-03-18 21:38:01       47 阅读
  9. Rust矢量数据库领域的优势

    2024-03-18 21:38:01       45 阅读
  10. 【Python学习笔记】Python logging模块的学习

    2024-03-18 21:38:01       39 阅读
  11. 算法笔记p142快速排序

    2024-03-18 21:38:01       42 阅读