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

设计模式--创建型

请添加图片描述

实现

#include <iostream>
#include <memory>// 抽象产品类
class Product {public:virtual ~Product() {}virtual void Operation() const = 0;
};// 具体产品 类A
class ConcreteProductA : public Product {public:virtual void Operation() const override {std::cout << "Product A" << std::endl;}
};// 具体产品 类B
class ConcreteProductB : public Product {public:virtual void Operation() const override {std::cout << "Product B" << std::endl;}
};enum class ProductType: uint8_t {ProductA = 0,ProductB = 1
};// 工厂类
class Factory {public:Product *CreateProduct(enum ProductType type) const {switch(type) {case ProductType::ProductA:return new ConcreteProductA;case ProductType::ProductB:return new ConcreteProductB;default:throw std::invalid_argument("Invalid product type");}}	
};int main(int argc, char **argv)
{Factory factory;// 创建产品 AConcreteProductA *productA = reinterpret_cast<ConcreteProductA*>(factory.CreateProduct(ProductType::ProductA));productA->Operation();delete productA;// 创建产品 BConcreteProductB* productB = reinterpret_cast<ConcreteProductB*>(factory.CreateProduct(ProductType::ProductB));productB->Operation();delete productB;return 0;
}

请添加图片描述

#include <iostream>
#include <memory>// 抽象产品类
class Product {public:virtual ~Product() {}virtual void Operation() const = 0;
};// 具体产品 类A
class ConcreteProductA : public Product {public:virtual void Operation() const override {std::cout << "Product A" << std::endl;}
};// 具体产品 类B
class ConcreteProductB : public Product {public:virtual void Operation() const override {std::cout << "Product B" << std::endl;}
};// 抽象工厂类
class Factory {public:virtual ~Factory(){}virtual Product *CreateProduct() = 0;	
};// A类工厂
class ProductAFactory: public Factory  {public:virtual Product *CreateProduct() override {return new ConcreteProductA();}
};// B类工厂
class ProductBFactory: public Factory  {public:virtual Product *CreateProduct() override {return new ConcreteProductB();}
};int main(int argc, char **argv)
{Factory *a_factory = new ProductAFactory();Factory *b_factory = new ProductBFactory();auto a_product = a_factory->CreateProduct();auto b_product = b_factory->CreateProduct();a_product->Operation();b_product->Operation();delete a_product;delete b_product;delete a_factory;delete b_factory;return 0;
}
http://www.lryc.cn/news/407067.html

相关文章:

  • Vue3时间选择器datetimerange在数据库存开始时间和结束时间
  • 鼠标移入事件 mouseover
  • UE4 自动换行——按排序关键字1.2.3.
  • Object.entries()解析出来的数组顺序乱了,健是string类型
  • SSM(Spring + Spring MVC + MyBatis)框架面试三道题
  • ctfshow-web入门-php特性(web132-web136)
  • 通信原理-实验六:实验测验
  • 意得辑润色新用户注册直减15%
  • 重拾CSS,前端样式精读-函数(颜色,计算,图像和图形)
  • 经纬恒润与奇瑞汽车签订新能源项目重点供应商合作协议,共同开启合作新篇章
  • @RestController和@Controller
  • STM32-寄存器DMA配置指南
  • 【Django】anaconda环境变量配置及配置python虚拟环境
  • 保障企业数据主权:安全可控的爬虫工具与管理平台
  • NC重建二叉树
  • 2025第十九届中国欧亚国际军民两用技术及西安国防电子航空航天暨无人机展
  • 电子邮件协议详解
  • C++客户端Qt开发——Qt窗口(工具栏)
  • Python酷库之旅-第三方库Pandas(046)
  • element表单disabled功能失效问题
  • react防抖和节流hooks封装
  • DLMS/COSEM中公开密钥算法的使用_椭圆曲线加密法
  • argon主题调整日记
  • Godot入门 05收集物品
  • 353_C++_Boost.Asio库来处理异步操作
  • 【Django】django模板与前端技术(html模板)
  • Java连接Redis和SpringBoot整合Redis
  • 快速入门Jupyter notebook
  • Java反射详细学习笔记
  • 区块链在艺术市场中的创新:数字艺术品的溯源与版权保护