当前位置: 首页 > article >正文

C++设计模式之工厂模式

工厂模式是一种创建型设计模式,旨在提供一种创建对象的接口,但允许子类决定实例化哪个类。工厂模式有多种形式,其中最常见的包括简单工厂模式、工厂方法模式和抽象工厂模式。

以下是一个简单工厂模式的例子,演示了如何使用工厂方法创建不同类型的产品对象:

#include <iostream>

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

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

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

// 抽象工厂类
class Factory {
public:
    // 工厂方法,用于创建产品对象
    virtual Product* createProduct() = 0;
    virtual ~Factory() {}
};

// 具体工厂类A
class ConcreteFactoryA : public Factory {
public:
    // 实现工厂方法,创建具体产品A
    Product* createProduct() override {
        std::cout << "This is Factory A." << std::endl;
        return new ConcreteProductB();
    }
};

// 具体工厂类B
class ConcreteFactoryB : public Factory {
public:
    // 实现工厂方法,创建具体产品B
    Product* createProduct() override {
        std::cout << "This is Factory B." << std::endl;
        return new ConcreteProductA();
    }
};

int main() {
    // 使用工厂A创建产品A
    Factory* factoryA = new ConcreteFactoryA();
    Product* productA = factoryA->createProduct();
    productA->display();

    // 使用工厂B创建产品B
    Factory* factoryB = new ConcreteFactoryB();
    Product* productB = factoryB->createProduct();
    productB->display();

    // 释放资源
    delete factoryA;
    delete factoryB;
    delete productA;
    delete productB;

    return 0;
}

http://www.kler.cn/a/231420.html

相关文章:

  • 商密测评题库详解:商用密码应用安全性评估从业人员考核题库详细解析(8)
  • Redis --- 分布式锁的使用
  • C++模板初识
  • 春晚舞台上的人形机器人:科技与文化的奇妙融合
  • 团体程序设计天梯赛-练习集——L1-025 正整数A+B
  • 在无sudo权限Linux上安装 Ollama 并使用 DeepSeek-R1 模型
  • 【MySQL】MySQL复合查询--多表查询/自连接/子查询
  • 高斯伪谱C++封装库开源!
  • 开发实践11_Blog
  • JS - 处理元素滚动
  • IDEA创建Java类时自动添加注释(作者、年份、月份)
  • leetcode-比特位计数
  • STM32搭建开发环境
  • 2024.2.4 awd总结
  • 08-常用集合(容器)
  • ThinkPHP 中使用Redis
  • javascript设计模式之建造者
  • matlab去图像畸变
  • 谷歌seo搜索引擎优化有什么思路?
  • 6个好看的wordpress模板
  • 忍者切水果
  • 14.0 Zookeeper环球锁实现原理
  • electron实现软件(热)更新(附带示例源码)
  • HTML 标签
  • 【Git版本控制 02】分支管理
  • re:从0开始的CSS学习之路 5. 颜色单位