设计模式-工厂模式(Factory)

Factory模式是一种创建型设计模式,用于封装对象的实例化过程。它提供了一个统一的接口来创建不同类型的对象,而无需暴露具体的实例化逻辑给客户端。

#include <iostream>
#include <memory>// AbstractProduct(抽象产品类):定义产品共同的接口
class Product {
public:virtual void operation() = 0;
};// ConcreteProductA(具体产品类A)
class ConcreteProductA : public Product {
public:void operation() override {std::cout << "ConcreteProductA operation" << std::endl;}
};// ConcreteProductB(具体产品类B)
class ConcreteProductB : public Product {
public:void operation() override {std::cout << "ConcreteProductB operation" << std::endl;}
};// Factory(工厂类):负责创建具体产品对象
class Factory {
public:std::unique_ptr<Product> createProduct(int type) {switch (type) {case 1:return std::make_unique<ConcreteProductA>();case 2:return std::make_unique<ConcreteProductB>();default:return nullptr;}}
};int main() {Factory factory;std::unique_ptr<Product> productA = factory.createProduct(1);if (productA)productA->operation();std::unique_ptr<Product> productB = factory.createProduct(2);if (productB)productB->operation();return 0;
}

抽象产品类Product,它定义了产品的共同接口。具体的产品类ConcreteProductA和ConcreteProductB继承自抽象产品类,实现了各自的具体操作。工厂类Factory负责创建具体产品对象。它根据传入的类型参数,在createProduct()方法中使用简单的条件语句创建相应的产品对象。此处使用std::unique_ptr来管理创建的产品对象,以确保资源的正确释放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/210484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis-plus处理blob字段

转载自&#xff1a;www.javaman.cn 在 Spring Boot 项目中使用 MyBatis-Plus 处理 longblob 字段时&#xff0c;我们可以按照以下步骤进行操作。假设 longblob 存储的是字符串数据。以下是完整的示例代码&#xff1a; 添加依赖&#xff1a;在你的项目的 pom.xml 文件中添加 My…

js判断上传的文件是GBK编码还是UTF-8

1、获取文件二进制数据&#xff0c;这里只做示例&#xff0c;例如element-ui中文件上传的beforeUpload方法&#xff0c;返回的file对象&#xff0c;然后使用FileReader对其进行转换&#xff0c;再进行后续判断 function beforeUpload(file: File) { const reader new FileRea…

Linux基本指令(超详版)

Linux基本指令&#xff08;超详版&#xff09; 1. ls指令2.pwd指令3. cd 指令4.touch指令5mkdir指令6.rmdir指令&&rm指令7.man指令7.cp指令8.mv指令9.echo指令10.cat指令11.more指令12.less指令13.head指令14.tail指令15.date指令16.find指令17.grep指令zip(打包压缩) …

JVM类加载器ClassLoader的源码分析

1、ClassLoader与现有类加载器的关系 ClassLoader与现有类加载器的关系&#xff1a; ClassLoader是一个抽象类。如果我们给定了一个类的二进制名称&#xff0c;类加载器应尝试去定位或生成构成定义类的数据。一种典型的策略是将给定的二进制名称转换为文件名&#xff0c;然后去…

C语言--实现一个函数把一个整数转为它对应的十六进制的字符串

一.题目描述 实现一个函数把一个整数转为它对应的十六进制的字符串。 比如&#xff1a;输入数字1234 输出&#xff1a;4D2 二.思路分析 用一个sprintf函数可以解决问题&#xff0c;输出相对应的字符串 要注意的问题就是&#xff1a;函数结束后要继续使用的内存&#xff08;比如…

Carla自动驾驶仿真六:pygame多个车辆摄像头画面拼接

此文章主要介绍carla前后左右摄像头画面拼接到pygame上 文章目录 前言一、要点分析二、完整代码三、拼接效果四、总结 前言 1、使用carla做仿真测试或者开发时&#xff0c;如果能够将车辆周边的画面拼接并渲染&#xff0c;可以直观地查看周围地环境&#xff0c;便于调试。本文…

Spring Boot 工厂模式 + 抽象类 + 泛型干掉重复代码

业务场景&#xff1a;N个Excel导入&#xff0c;实现动态加载&#xff0c;只需要定义Excel实体&#xff0c;即可实现功能开发&#xff0c; 核心代码 import cn.afterturn.easypoi.excel.annotation.ExcelTarget; import cn.hutool.core.annotation.AnnotationUtil; import cn.h…

删除Windows系统中无用的隐藏设备

一些即插即用设备会占用一些隐藏的系统资源&#xff0c;比如USB转串口的设备会占用COM号码&#xff0c;网卡会占用静态IP地址等等。 通常我们使用设备管理器的显示隐藏设备功能&#xff0c;来删除这些设备。但是设备管理器每次只允许删除一个设备&#xff0c;如果设备太多了&a…

【算法集训】基础数据结构:四、栈

栈理解了两天&#xff0c;所以迟了一天发。 一、栈的概念 栈是一个容器&#xff0c;是一个先进后出的线性表&#xff0c;类似与日常生活中的电梯、杯子等。 仅限在表尾部进行插入和删除操作。 使用链表来模拟栈&#xff1a; typedef int DataType; 相当于给int起一个别名 st…

Go 协程基础:轻松入门并发编程,解析 Goroutines 的奥秘

一、协程基本使用 1、启动一个协程 主线程中每个100毫秒打印一次&#xff0c;总共打印2次另外开启一个协程&#xff0c;打印10次情况一&#xff1a;打印是交替&#xff0c;证明是并行的情况二&#xff1a;开启的协程打印2次&#xff0c;就退出了&#xff08;因为主线程退出了…

做题笔记:SQL Sever 方式做牛客SQL的题目--SQL157

----SQL157 平均播放进度大于60%的视频类别 计算各类视频的平均播放进度&#xff0c;将进度大于60%的类别输出。 注&#xff1a; 播放进度播放时长视频时长*100%&#xff0c;当播放时长大于视频时长时&#xff0c;播放进度均记为100%。 结果保留两位小数&#xff0c;并按播放进…

基于ssm的学生公寓管理中心系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本学生公寓管理中心系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

[报错]记录IDEA远程开发报错:java: Cannot run program.....

报错内容 IDEA在进行远程开发的时候报错&#xff0c;内容如下&#xff1a; java: Cannot run program "/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java" (in directory "/home/jim/.cache/JetBrains/RemoteDev-IU/_home_jim_DevCodes_Github_zfile/compile-…

redis主从复制【面试必看】

在分布式系统中&#xff0c;希望使用多个服务器来部署redis&#xff0c;存在以下几种redis的部署方式 主从模式主从哨兵集群模式 主从模式 在若干个redis节点中&#xff0c;有的是主节点&#xff0c;有的是从节点 假设有三个物理服务器&#xff08;称为是三个节点&#xff…

(JSP)EL——优化登录界面,获取对象,获取数据

EL优化登录界面 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <% String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":"reques…

生产工序(oj题)

很有趣的一道题 关键在于固定工序的整合 看样例是固定工序中间是不能插入其他工序的&#xff08;也不讲清楚&#xff09;&#xff0c;如果可以的话&#xff0c;只能说可能会更麻烦 注意固定工序是按照固定工序中的第一个工序进行排序的 整合完之后&#xff0c;就是递归列出…

Java中的IO流①——IO流的体系、字节流、try...catch异常处理

概述 IO流的分类 IO流的体系 这四个类都是抽象类&#xff0c;所以需要实现类对象才能使用---> 字节流 FileInputStream--> 书写细节 代码示范 此时文件a.txt内容为abcde 使用char强转和read方法调用五次read方法--> public static void main(String[] args) throws IO…

mysql 语言学习

整理了一下 mysql 操作语言&#xff0c;不是很全&#xff0c;部分地方也许需要修改&#xff0c;先放上来&#xff0c;有时间再慢慢完善。 一、数据库操作 连接数据库 $ sudo mysql [-h ip] -u root -p [-P 3306] 初始化数据库 $ mysql_secure_installation备份数据库 # 备…

初出茅庐的小李博客之TobudOS移植到EVB_AIoT开发板

本博客参考教程&#xff1a; https://atomgit.com/OpenAtomFoundation/TobudOS/blob/master/doc/TobudOS_EVB_AIoT_STM32_Guide.md 介绍一下EVB_AIoT开发板 这个开发板是由TobudOS开源社区联合意法半导体、南京厚德物联网设计的一款高性能IoT开发平台&#xff0c;主控芯片是S…

SystemVerilog学习(0)——目录与传送门

一、验证导论 SystemVerilog学习&#xff08;1&#xff09;——验证导论-CSDN博客文章浏览阅读403次。SystemVerilog自学&#xff0c;验证系统概述&#xff0c;什么是SVhttps://blog.csdn.net/apple_53311083/article/details/133953016 二、数据类型 SystemVerilog学习&…