当前位置: 首页 > 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

相关文章:

  • Linux网络——套接字编程
  • 表格的选择弹窗,选中后返显到表格中
  • 【快速入门】前端御三家:HTML、CSS和JS
  • ubuntu20.04 更换清华源报错
  • 经验笔记:Git 基础操作指南
  • Python中的with语句
  • 【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. 颜色单位