C++设计模式之工厂模式(上)——简单工厂模式

工厂模式

  • 概述
  • 简单工厂模式
    • 介绍
    • 示例
    • 示例使用
    • 运行结果
    • 缺点

概述

工厂模式属于一种创建型设计模式。其可以分为简单工厂模式,工厂模式和抽象工厂模式。工厂模式分为上、中、下三篇,本篇主要介绍简单工厂模式。

简单工厂模式

介绍

简单工厂模式可以理解为一个工厂根据产品的种类生产多种不同的产品。简单工厂模式只有一个工厂类,工厂类中提供一个工厂函数,用于根据产品种类生产各种不同产品。

示例

下面给出一个示例,来加深理解简单工厂模式。
有一个工厂(Factory)生产塑料笔筒(PlasticPenHolder)和铁制笔筒(IronPenHolder)。

enum MyPenHolder
{plasticHolder,//塑料笔筒ironHolder//铁制笔筒
};class PenHolder 
{
public:virtual void introduce() = 0;
};class PlasticPenHolder :public PenHolder 
{
public:void introduce()override {cout << "I am PlasticPenHolder!" << endl;}
};class IronPenHolder :public PenHolder 
{
public:void introduce()override {cout << "I am IronPenHolder!" << endl;}
};class Factory 
{
public:PenHolder* createPenHolder(enum MyPenHolder &type) {if (type == plasticHolder){return new PlasticPenHolder;}else if (type == ironHolder){return new IronPenHolder;}else {return nullptr;}}
};

示例使用

int main() 
{MyPenHolder type = MyPenHolder::plasticHolder;MyPenHolder type1 = MyPenHolder::ironHolder;Factory *factory = new Factory;PenHolder *holder = factory->createPenHolder(type);PenHolder *holder1 = factory->createPenHolder(type1);holder->introduce();holder1->introduce();delete holder;delete holder1;delete factory;return 0;
}

运行结果

在这里插入图片描述

缺点

当需要生产的产品的种类增加时,工厂类就需要修改,打破了程序设计原则中的封闭原则。

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

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

相关文章

react中虚拟dom,diff,fiber - 初级了解

借鉴&#xff1a; 「React深入」一文吃透虚拟DOM和diff算法 - 掘金 (juejin.cn) 虚拟dom、fiber、渲染dom、dom-diff - 掘金 (juejin.cn) 未阅读源码&#xff0c;了解层面&#xff0c;后续可以深入了解 1.虚拟DOM ①.结构上&#xff1a;虚拟DOM比真实DOM轻很多 ②.操作上&…

JS逆向之wasm逆向(二)

本文仅供技术交流和技术学习 不做其他用途 接着上一篇继续讲&#xff1a; 上篇地址&#xff1a; JS逆向之wasm逆向(二进制) 网址&#xff1a; aHR0cHM6Ly93d3cuN3E2Y3lqLmNvbTo5MDAxL3JlZ2lzdGVyNDY5Njg/aV9jb2RlPTQ0Mjc5OTU1 这个网站我们后面可以继续讲他的debugger 和滑块…

玻色量子“揭秘”之多项式回归问题与QUBO建模

摘要&#xff1a;多项式回归&#xff08;Polynomial Regression&#xff09;是一种回归分析方法&#xff0c;通过拟合一个多项式方程来模拟自变量与因变量之间的非线性关系。多项式回归的目标是找到一组多项式系数&#xff0c;使得拟合曲线尽可能地接近数据点。这种方法可以用于…

本地websocket服务端暴露至公网访问【cpolar内网穿透】

本地websocket服务端暴露至公网访问【cpolar内网穿透】 文章目录 本地websocket服务端暴露至公网访问【cpolar内网穿透】1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功…

centos7上用docker部署redis

1. 下载redis镜像 docker pull redis docker images # 查看镜像是否下载成功2. 安装redis容器 2.1 先准备好配置文件redis.conf vi /data/redis/redis.conf写入配置信息&#xff0c;appendonly yes&#xff0c;如果需要给redis配置密码&#xff0c;可以写入requirepass root…

Feign 远程调用

目录 代码架构 feign-api 模块解析 架构 依赖 定义接口类 lead-news-article模块 架构 yml配置 依赖 实现类 启动类 lead-news-wemedia模块 架构 调用 启动类 代码架构 feign-api 模块解析 架构 依赖 <dependency><groupId>org.springframework.clo…

为何越来越多的程序员纷纷转行网络安全?

目前&#xff0c;我国IT行业的人才结构不断升级&#xff0c;公司对程序员的要求越来越高&#xff0c;出现了大量的裁员现象&#xff0c;导致很多的程序员纷纷想转行的想法。 可能对于早期的程序员而言&#xff0c;学好编程语言就能找到比较好的工作。而现在伴随着互联网的不断发…

【深度学习实验】图像处理(一):Python Imaging Library(PIL)库:图像读取、写入、复制、粘贴、几何变换、图像增强、图像滤波

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 安装 PIL 库1. 图像读取和写入a. 图像读取b. 图像写入c. 构建新图像 2. 图像复制粘贴a. 图像复制b. 图像局部复制c. 图像粘贴 3. 几何变换a. 图像调整大小b. 图像旋转c. 图像翻转 4. 图像增强a.…

5个免费在线工具推荐

NSDT 三维场景建模工具GLTF/GLB在线编辑器Three.js AI自动纹理化开发包YOLO 虚幻合成数据生成器3D模型在线转换 1、NSDT 三维场景建模 访问地址&#xff1a;NSDT 编辑器 2、GLTF/GLB在线编辑器 访问地址&#xff1a;GLTF 编辑器 3、Three.js AI自动纹理化开发包 图一为原始模…

【史上最细教程】一台服务器上搭建2个MySQL实例

史上最细教程-一台服务器上搭建2个MySQL实例 文章目录 史上最细教程-一台服务器上搭建2个MySQL实例环境准备&#xff1a;操作步骤&#xff1a;1.安装MySQL2.配置搭建3306、3307实例3.初始化3306、3307实例、远程连接访问支持 推荐文章&#xff1a; 环境准备&#xff1a; 服务器…

给做steam游戏搬砖项目新手小白的5个警示

CSGO搬砖日常出货更新 今天&#xff0c;阿阳要向你们揭秘一个备受瞩目的项目——Steam搬砖项目。或许你们已经听闻过它的名字&#xff0c;但今天我要带领你们深入了解这个项目的本质&#xff0c;为你们揭示五个必须警惕的警示。让我们共同探索这个项目是否适合你们&#xff0c;…

关于「光学神经网络」的一切:理论、应用与发展

/目录/ 一、线性运算的光学实现 1.1. 光学矩阵乘法器 1.2. 光的衍射实现线性运行 1.3. 基于Rayleigh-Sommerfeld方程的实现方法 1.4. 基于傅立叶变换的实现 1.5. 通过光干涉实现线性操作 1.6. 光的散射实现线性运行 1.7. 波分复用&#xff08;WDM&#xff09;实现线性运…