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.mzph.cn/news/163919.shtml

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

相关文章

二叉树题目:具有所有最深结点的最小子树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;具有所有最深结点的最小子树 出处&#xff1a;865. 具有所有最深结点的最小子树 难度 5 级 题目描述 要求 给定…

HCIP-六、OSPF-2 综合实验

六、OSPF-2 综合实验 实验拓扑实验需求及解法1.设备名称和部分IP地址已配置2.所有设备运行OSPF&#xff0c;进程号为13.区域间路由汇总4.外部路由汇总5.下发默认路由6. 虚链路 实验拓扑 实验需求及解法 本实验模拟OSPF综合型网络&#xff0c;按照以下需求完成实验。 1.设备名…

EventLog Analyzer:强大的日志管理与分析工具

随着企业网络规模的扩大和信息系统的复杂化&#xff0c;安全日志管理和分析成为了至关重要的一环。在这个背景下&#xff0c;EventLog Analyzer崭露头角&#xff0c;成为一款备受推崇的日志管理与分析工具。本文将介绍EventLog Analyzer的主要特点、功能以及为企业带来的实际价…

IDEA安装教程

文章目录 1 下载IntelliJ IDEA2 安装3 IDEA配置4 创建项目 1 下载IntelliJ IDEA ​ 官方网站上下载最新版本的IntelliJ IDEA。官方网站提供了两个版本&#xff1a;Community版和Ultimate版。 Community版是免费的&#xff0c;适用于个人和非商业用途。Ultimate版则需要付费购…

Exception in thread “消费者“ java.lang.IllegalMonitorStateException

这两天学习生产者消费者模型的时候&#xff0c;使用Java线程来实现&#xff0c;出现了一个问题“Exception in thread "消费者" java.lang.IllegalMonitorStateException”&#xff0c;并且&#xff0c;线程不结束。报错图片如下&#xff1a; 那我们怎么解决呢&…

竞赛选题 题目: 基于深度学习的疲劳驾驶检测 深度学习

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…

河北专升本(微机原理)

目录 第一章&#xff1a;计算机基础与数制转化 1. 进制运算基础 2. 常用编码形式 3. 计算机系统的组成及其工作原理 4. 微机系统主要技术指标 第二章&#xff1a;8086微处理器及其系统 1. 8086微处理器&#xff08;CPU&#xff09; 2. 8086的存储器及I/O组织 3. 8086系…

vue中的列表过滤和列表排序

列表过滤 <body><div id"root"><!--输入框用于模糊查询--><input type"text" placeholder"请你输入名字" v-model"name"><ul><!--in可以换成of--><li v-for"(p,index) in persons" …

航天博物馆3D虚拟交互展厅让大众对科技发展有更深切的理解和感受

博物馆作为人们了解历史、文化和艺术的重要场所&#xff0c;现在可以通过VR全景技术来进行展览&#xff0c;让参观者身临其境地感受历史文化的魅力。本文将介绍博物馆VR全景的特点、优势&#xff0c;以及如何使用VR全景技术来使得博物馆的展览和教育活动更丰富。 VR数字博物馆…

WPF图形变形使用技巧

在 WPF (Windows Presentation Foundation) 中&#xff0c;图形变形通常是通过使用 Transform 对象来实现的。WPF 提供了几种不同类型的 Transform&#xff0c;包括&#xff1a; TranslateTransform&#xff1a;用于在 x 轴和 y 轴上移动&#xff08;平移&#xff09;元素。Sc…

SSH 下载及安装之 Windows Server

文章目录 1 概述1.1 操作系统截图1.2 下载 2 安装2.1 解压到指定路径2.2 CMD 到 OpenSSH 目录下2.3 安装 sshd 服务2.3 开放端口 222.4 配置开机自启 sshd 服务2.5 配置环境变量 path2.6 测试 3 连接3.1 使用 Xshell 连接3.2 输入登录用户名3.3 输入登录密码3.4 会话已建立 1 概…

3、如何从0到1去建设数据仓库

1、数仓实施过程 1.1 数据调研 数据调研包括&#xff1a;业务调研、需求调研 业务调研 需要调研企业内有哪些业务线、业务线的业务是否还有相同点和差异点 各个业务线有哪些业务模块&#xff0c;每个模型下有哪些业务流程&#xff0c;每个流程下产生的数据 是怎样存储的 业务调…

python数据结构与算法-16_优先级队列

优先级队列 你可能比较奇怪&#xff0c;队列不是早就讲了嘛。这里之所以放到这里讲优先级队列&#xff0c;是因为虽然名字有队列&#xff0c; 但其实是使用堆来实现的。上一章讲完了堆&#xff0c;这一章我们就趁热打铁来实现一个优先级队列。 实现优先级队列 优先级队列(Pr…

UWA报告使用技巧小视频,你get了么?(第十一弹)

随着玩家对手游渲染品质的要求日益趋上&#xff0c;60帧、各种花式后处理导致发热、耗电等问题日趋明显。本期UWA报告使用技巧将分享关于GPU优化的专题姊妹篇。 《GPU性能优化篇》 UWA专注于手游GPU性能的优化&#xff0c;以确保您的游戏体验得以最佳展现。基于最新发布的GOT …

141.【Git版本控制】

Git-深入挖掘 (一)、Git分布式版本控制工具1.目标2.概述(1).开发中的实际常见(2).版本控制器的方式(3).SVN (集中版本控制器)(4).Git (分布版本控制器)(5).Git工作流程图 (二)、Git安装与常用命令1.Git环境配置(1).安装Git的操作(2).Git的配置操作(3).为常用的指令配置别名 (可…

轻松解决rpm软件包的依赖问题 yum download ,rpm和deb不同系列

centos rpm系列的 为它往往有很多依赖项目。比如&#xff0c;我们来查看一下net-tools的依赖项有哪些&#xff1a; yum deplist net-tools 推荐使用以下几种方法&#xff1a; 1.repotrack 我这里也以上期讲到的Mariadb为例演示&#xff0c;以下操作需要在有网络的环境下进…

国内企业出海首选的免费开源订单管理系统(OMS)解决方案

用开源智造Odoo订单管理系统 (OMS) 解决方案实现"订单到收款"流程自动化 开源智造Odoo 订单管理软件功能消除了手动操作瓶颈&#xff0c;可防止出错&#xff0c;还建立了从销售报价到订单履行的顺畅工作流来确保及时开票和付款&#xff0c;从而帮助您理顺订单处理过程…

Python将多个视频帧组合成.mp4视频

已经有很多文章描述了如何将视频拆分成视频帧&#xff0c;例如&#xff1a;https://blog.csdn.net/WYKB_Mr_Q/article/details/124929081 那我们如何将很多视频帧重新组合成视频呢&#xff1f; 这里我们主要用到了 OpenCV 库中的 VideoWriter 类。 OpenCV种的 cv2.VideoWrit…

jdbc批量插入或更新数据

mybatis可以批量插入或更新数据&#xff0c;不过mybatis底层也是基于jdbc来实现的&#xff0c;如何使用jdbc批量操作数据&#xff1f;本文给出demo。 /*** JDBC分批次批量插入* * throws IOException*/public static void testJDBCBatchInsertUser() throws IOException {Conne…

工作流引擎的架构设计主要考虑以下方面

工作流引擎的架构设计主要考虑以下方面&#xff0c;以驰骋工作流引擎为例来说明。 高度抽象和封装&#xff1a;为了适应各种业务场景&#xff0c;工作流引擎应具备高度抽象和封装的特性&#xff0c;以便统一处理各流程。灵活配置&#xff1a;工作流引擎应支持灵活的配置&#…