【C++】简单工厂模式
2023年12月6日,周三下午
今天又学习了一次简单工厂模式
每多学习一次,都会加深对设计模式的理解
目录
- 什么是简单工厂模式
- 简单工厂模式的优缺点
- 举例说明
什么是简单工厂模式
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一种通过使用一个共同的接口来创建不同类型对象的方法。
在简单工厂模式中,有一个工厂类负责创建对象,而不是直接在客户端代码中实例化对象。客户端只需要通过向工厂类发送请求,并传递相应的参数,工厂类就会根据参数的不同来创建具体的对象。
简单工厂模式包含以下几个角色:
- 工厂类(Factory Class):负责根据客户端的请求创建对象,并将对象返回给客户端。
- 抽象产品类(Abstract Product Class):定义了产品的共同接口,用于描述具体产品类的共同特征。
- 具体产品类(Concrete Product Class):实现了抽象产品类的接口,具体产品类是由工厂类创建的对象。
简单工厂模式的优缺点
简单工厂模式的优势在于将对象的创建和使用进行了分离,客户端只需要关心如何使用对象,而无需关心对象的创建过程。这样可以降低代码的耦合性,并提供了一定的灵活性,如果需要新增或修改产品,只需要修改工厂类即可。
然而,简单工厂模式也有一些限制。例如,当需要创建的产品类型较多时,工厂类的代码会变得复杂,违反了开闭原则。此外,简单工厂模式也无法满足创建对象的变化需求,需要借助其他的创建型设计模式,如工厂方法模式或抽象工厂模式。
举例说明
#include <iostream>// 抽象产品类
class Shape {
public:virtual void draw() = 0;
};// 具体产品类:圆形
class Circle : public Shape {
public:void draw() override {std::cout << "Draw a circle." << std::endl;}
};// 具体产品类:矩形
class Rectangle : public Shape {
public:void draw() override {std::cout << "Draw a rectangle." << std::endl;}
};// 工厂类
class ShapeFactory {
public:// 创建具体产品对象的方法Shape* createShape(const std::string& type) {if (type == "circle") {return new Circle();} else if (type == "rectangle") {return new Rectangle();} else {return nullptr; // 可以根据实际情况返回默认的或者异常处理}}
};int main() {ShapeFactory factory;Shape* shape1 = factory.createShape("circle");shape1->draw(); // 输出:Draw a circle.Shape* shape2 = factory.createShape("rectangle");shape2->draw(); // 输出:Draw a rectangle.return 0;
}

相关文章:
【C++】简单工厂模式
2023年12月6日,周三下午 今天又学习了一次简单工厂模式 每多学习一次,都会加深对设计模式的理解 目录 什么是简单工厂模式简单工厂模式的优缺点举例说明 什么是简单工厂模式 简单工厂模式(Simple Factory Pattern)是一种创建型…...
el-tree数据量过大,造成浏览器卡死、崩溃
el-tree数据量过大,造成浏览器卡死、崩溃 场景:树形结构展示,数据超级多,超过万条,每次打开都会崩溃 我这里采用的是引入新的插件虚拟树,它是参照element-plus 中TreeV2改造vue2.x版本虚拟化树形控件&…...
2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A
2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A 目录 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A 需要环境或者解析可以私信 (二)A 模块基础设施设置/安全加固(200 分&…...
面向LLM的App架构——业务维度
这是两篇面向LLM的大前端架构的第一篇,主要写我对LLM业务的认知以及由此推演出的大前端架构。由于我是客户端出身,所以主要以客户端角度来描述,并不影响对前端的适用性。 对LLM的认知 基于Google对AGI的论文,AGI或者LLM一定会朝…...
ElasticSearch之cat plugins API
命令样例如下: curl -X GET "https://localhost:9200/_cat/plugins?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下: name component version…...
【小米电脑管家】安装使用教程--非小米电脑
安装说明功能体验下载资源 Xiaomi HyperOS发布后,小米妙享电脑端独立版本也走向终点,最新的【小米电脑管家】将会内置妙享实现万物互联。那么本篇文章将分享非小米电脑用户如何绕过设备识别验证安装使用【小米电脑管家】实现万物互联 安装说明 1.解压文…...
视频讲解|基于多目标粒子群算法的配电网储能选址定容
1 主要内容 该视频为3012基于多目标粒子群算法的配电网储能选址定容matlab代码讲解内容,对应的资源下载链接为基于多目标粒子群算法的配电网储能选址定容,程序主要内容是:以系统节点电压水平(电网脆弱性)、网络损耗以…...
Android 13 - Media框架(22)- MediaCodec(三)
这一节开始我们将重新回到 MediaCodec 这一层来学习 buffer 的流转 status_t MediaCodec::dequeueOutputBuffer(size_t *index,size_t *offset,size_t *size,int64_t *presentationTimeUs,uint32_t *flags,int64_t timeoutUs) {sp<AMessage> msg new AMessage(kWhatDequ…...
git提交报错 fatal: LF would be replaced by CRLF in package-lock.json
报错 fatal: LF would be replaced by CRLF in package-lock.json 原因 git 在windows下,默认是CRLF作为换行符, git add 提交时,会检查文本中是否有LF 换行符(linux系统),如果有则会告警, 所…...
卷积详解和并行卷积
ps:在 TensorFlow Keras 中,构建 Sequential 模型的正确方式是将层作为列表传递,而不是作为一系列单独的参数。 modelmodels.Sequential([layers,layers]) 而不是modelmodels.Sequential(layers,layers) 文章目录 卷积…...
c#生成二维码二维码中间添加定制LoGo
🚀介绍 🍀QRCoder是一个开源的.NET库,用于生成QR码(Quick Response Code)。这个库是用C#编写的,并且可以在.NET框架的各种版本上使用,包括.NET Framework, .NET Core, Mono, Xamarin等。QRCode…...
设计CPU功能的数字电路
实验目的(1)熟悉Multisim 电路仿真软件的操作界面和功能; (2)掌握逻辑电路综合设计,并采用仿真软件进行仿真。 实验内容1.试设计一个简易CPU功能的数字电路,实验至少要求采用4个74HC/HCT194作为4个存储单元(可以预先对存储单元存储数据),74HC283作为计算单元。请实现…...
在windows下编译libiconv库
libiconv是一个基于GNU协议的开源库,主要用于解决多语言编码处理转换等应用问题。在linux系统使用比较方便,但是windows下使用需要进行源码编译。这里我是使用libiconv的1.15版本源码和VS2019默认工具集配置进行编译。 首先需要用VS2019创建一个空项目,根目录为libiconv。 在…...
html,css,开发知识,调试知识
nget 方式提交 n使用 get 方式提交数据时,表单数据会附加在 URL 之后,由用户端直接发送至服务器,所以速度比 post 快,但缺点是数据长度不能太长。 npost 方式提交 n使用 post 时,表单数据是与 URL 分开发送的&#…...
Vulnerability: File Upload(Medium)--MYSQL注入
选择难度: 1.打开DVWA,并登录账户 2.选择模式,这里我们选择 文件上载的中级模式(Medium) 准备工作 1.在vsc里面写个一句话木马 2.下载BurpSuiteCommunit软件:百度搜索“burp suite官网” 下载地址www…...
短视频账号剪辑矩阵+无人直播系统源头开发
抖去推爆款视频生成器,通过短视频矩阵、无人直播,文案引流等,打造实体商家员工矩阵、用户矩阵、直播矩阵,辅助商家品牌曝光,团购转化等多功能赋能商家拓客引流。 短视频矩阵通俗来讲就是批量剪辑视频和批量发布视频&am…...
Python traceback模块:获取异常信息
异常对象提供了一个 with_traceback 用于处理异常的传播轨迹,查看异常的传播轨迹可追踪异常触发的源头,也可看到异常一路触发的轨迹。 下面示例显示了如何显示异常传播轨迹: class SelfException(Exception): passdef main():firstMethod() …...
单点登录方案调研与实现
作用 在一个系统登录后,其他系统也能共享该登录状态,无需重新登录。 演进 cookie → session → token →单点登录 Cookie 可以实现浏览器和服务器状态的记录,但Cookie会出现存储体积过大和可以在前后端修改的问题 Session 为了解决Co…...
HarmonyOS应用开发者基础认证考试(稳过)
判断题 1. Web组件对于所有的网页都可以使用zoom(factor: number)方法进行缩放。错误(False) 2. 每一个自定义组件都有自己的生命周期正确(True) 3. 每调用一次router.pushUrl()方法,默认情况下,页面栈数量会加1,页面栈支持的…...
日常开发日志
目录 1、idea开发服务启动的网页地址不显示前端样式: 2、java Date 与myibits 的空判断: 1、idea开发服务启动的网页地址不显示前端样式: idea开发时,tomcat启动的后端弹出的网页地址,呈现的网页没有样式࿰…...
DeepFaceLive实时面部交换技术完全教程
DeepFaceLive实时面部交换技术完全教程 还在为视频会议和直播效果发愁吗?想不想在下次Zoom会议中突然变身成你喜欢的明星?DeepFaceLive这款神奇的工具能让你的面部特效梦想成真!今天我们就来聊聊这个让无数内容创作者痴迷的实时面部交换技术…...
如何用AI润色简历?2026年分步指南与实用技巧
在2026年的求职市场中,简历是连接你与心仪岗位的第一座桥梁。面对日益智能化的招聘系统(ATS)和快节奏的筛选流程,仅凭一份通用简历已难以脱颖而出。这时,AI润色简历从一种新兴尝试转变为高效、精准的必备策略。本文旨在…...
低显存福音:实测Neeshck轻量化工具,16G显卡流畅跑Z-Image模型
低显存福音:实测Neeshck轻量化工具,16G显卡流畅跑Z-Image模型 1. 轻量化方案的诞生背景 1.1 大模型与小显存的矛盾 Z-Image作为国产文生图模型的代表,其强大的生成能力有目共睹。但原生部署对显存的高要求(通常需要20GB以上&am…...
JetBrains IDE重置工具终极指南:30天试用无限续杯的完整教程
JetBrains IDE重置工具终极指南:30天试用无限续杯的完整教程 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否经历过这样的场景:深夜加班赶项目,JetBrains IDE突然弹出&qu…...
别再手动记数据了!组态王Kingview 7.5 SP6搭配Access数据库,实现工业数据自动存储与查询
工业数据自动化管理实战:组态王与Access的高效联动方案 在工业现场,数据采集与记录是保障生产稳定运行的基础环节。传统的手工记录方式不仅效率低下,还容易因人为因素导致数据错漏。我曾在一家化工厂亲眼目睹操作员因记录笔误导致整批生产参数…...
快速验证dify部署方案:用快马生成环境检查与部署脚本原型
最近在折腾dify的本地部署,发现环境配置这块特别容易踩坑。作为一个开源AI应用开发平台,dify的部署涉及Python版本、Docker环境、端口占用等一系列依赖项检查,手动操作既繁琐又容易遗漏步骤。正好发现InsCode(快马)平台能快速生成这类工具的原…...
终极视频修复指南:如何使用Untrunc轻松恢复损坏的MP4/MOV文件
终极视频修复指南:如何使用Untrunc轻松恢复损坏的MP4/MOV文件 【免费下载链接】untrunc Restore a truncated mp4/mov. Improved version of ponchio/untrunc 项目地址: https://gitcode.com/gh_mirrors/un/untrunc 你是否曾经遇到过珍贵的视频文件突然无法播…...
4步解放炉石玩家:开源脚本工具从配置到精通全指南
4步解放炉石玩家:开源脚本工具从配置到精通全指南 【免费下载链接】Hearthstone-Script Hearthstone script(炉石传说脚本) 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script 你是否也曾遇到这样的困境:每…...
新手必看:OWL ADVENTURE治愈系AI,手把手教你检测‘坏图片’
新手必看:OWL ADVENTURE治愈系AI,手把手教你检测坏图片 1. 为什么需要检测"坏图片"? 在数字世界中,图片不仅仅是美丽的风景或可爱的宠物照片。它们也可能成为网络威胁的载体。想象一下这些场景: 你收到一…...
GDBFrontend安全部署指南:保护调试会话的5个最佳实践
GDBFrontend安全部署指南:保护调试会话的5个最佳实践 【免费下载链接】gdb-frontend ☕ GDBFrontend is an easy, flexible and extensible gui debugger. Try it on https://debugme.dev 项目地址: https://gitcode.com/gh_mirrors/gd/gdb-frontend GDBFron…...
