C++ 大话设计之《简单工厂模式》(优缺点,设计原理,常用场景)

2023-11-09

简单工厂是一种创建型模式


优点:

简单工厂模式能够提高生产效率和生产力。

缺点:

  • 简单工厂模式将所有产品的创建逻辑集中在一个工厂类中,一旦这个工厂类出现问题,整个系统都会受到影响。
  • 如果要添加新的产品类,需要修改工厂类的代码,违反了开闭原则(对扩展开放,对修改关闭)。

常用实例:

简单工厂模式常用于客户端不需要或不应该知道如何创建具体类型对象的情况。例如,自动售货机销售糖果(或其他产品),咖啡机制作各种类型的咖啡:浓咖啡、卡布奇诺、拿铁等。在这些情况下,简单工厂模式可以帮助客户端轻松创建所需的产品对象,而无需关心对象的创建细节。

类图:

代码:

 

#include<iostream>
#include"string"

using namespace std;

enum MyEnum
{
	add=1,
	Mul

};

//产品基类
class product 
{
public:
	int a,b;

	virtual int operation(int a,int b)=0;

};

class product_Add :public product
{
public:
	
	int operation(int a, int b)
	{
		cout<<a+b<<endl;
		
		return 0;
	}

};
class product_Mul :public product
{
public:

	int operation(int a, int b)
	{
		cout << a*b << endl;

		return 0;
	}

};

//工厂抽象类
class Factory 
{
public:
	
	product* create(int index)
	{
		switch (index)
		{
			case add:
				return new product_Add();
				break;
			case Mul:
				return new product_Mul();
				break;
		default:
			break;
		}
	}
};

int main()
{

	product* pro=new product_Add;
	pro->operation(2,3);

	//简单工厂调用
	Factory *fac=new Factory; 
	product* _product= fac->create(Mul);
	_product->operation(2,3);

	return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 大话设计之《简单工厂模式》(优缺点,设计原理,常用场景) 的相关文章

  • “RouteCollection”不包含“MapMvcAttributeRoutes”的定义

    我尝试使用基于属性的路由 但是当我尝试以下代码片段来激活基于属性的路由时 我收到以下错误消息 RouteCollection 不包含定义 MapMvcAttributeRoutes 这是我的代码 public class RouteConf
  • ASP Core HttpClientFactory 模式使用客户端证书

    任何人都知道在使用时如何使用客户端证书HttpClientFactory 在我发现的所有示例中 您需要提供HttpMessageHandler in the HttpClient构造函数 使用时不可用HttpClientFactory se
  • C中函数指针的递归声明

    我想声明一个返回指向相同类型函数的指针的函数 我想用它来实现如下状态机 typedef event handler t event handler t event t compilation error event handler t st
  • 如果两个线程同时访问同一个 bool 变量会发生什么?

    我有一个跨平台 C 程序 其中使用 boost 库创建异步计时器 我有一个全局变量 bool receivedInput false 一个线程等待并处理输入 string argStr while 1 getline cin argStr
  • C# 测试活动的互联网连接。 Ping google.com

    C 2008 我正在使用此代码来测试互联网连接 因为我的应用程序必须登录到网络服务器 但是 如果用户互联网连接失败或电缆被拔出 我必须通知用户 Ping www google com to check if the user has a i
  • 可变数量的(常量)引用参数

    我试图从我的高级代码 使用 C 11 中消除原始指针 并且我找到了引用 尤其是const 在许多情况下 当没有所有权转移时 是一个很好的替代品 但如果有的话该怎么办variable我想通过 常量 引用传递的参数数量 你不能创建一个std v
  • WPF Dispatchertimer 延迟反应/冻结

    在我的 WPF 应用程序中 我使用 3 个不同的 DispatcherTimers 一种是用于显示当前时间 一种是每 5 秒运行一次数据库查询 第三个每 1 秒刷新一次自定义按钮的值 当我的程序运行时 有很多延迟 冻结 例如 时间开始正确计
  • 比较 LINQ to SQL 中的两个日期

    我有一个数据库 其中有一个名为会议的表 会议日期使用以下格式存储在此表中 May 2nd 2011 例如 格式为5 2 2011 我的要求是获取两个日期 例如 2011 年 4 月 25 日和 2011 年 5 月 2 日 之间的会议 并编
  • NHibernate IQueryable 集合作为 root 的属性

    我有一个根对象 它有一个集合属性 例如 I have a Shelf object that has Books Now public class Shelf public ICollection
  • 在目标 VS 安装时,VSIX 扩展内部使用的 WPF-Log4Net 未输出日志

    当 Log4net 在 VSIX 扩展中使用并安装在另一个目标 VS 上时 它不会记录日志 我有一个 WPF 解决方案 我下载了 log4net dll 添加了 log4net config 并将 复制到输出目录 值设置为 始终复制 log
  • 为什么将 char 传递给函数会改变它在 c 中的值?

    我目前正在关注本作业簿 http www cs bham ac uk exr lectures opsys 10 11 lectures os dev pdf关于构建操作系统 我的目的是写一个64位内核 我已经在文本模式下加载 内核 代码并
  • 以编程方式运行 T4 文本模板

    有没有一种方法可以通过代码以编程方式运行 T4 文本模板 我正在制作一种自定义域特定语言 我希望相关的文本模板在用户每次保存时运行 目前 这就是我在 DSL 模型中所做的事情 protected override void OnDocume
  • ASP.NET中如何访问除wwwroot以外的位置

    我可以使用访问服务器的物理位置Server MapPath 这给了我内部的物理路径wwwroot文件夹 我想将一些数据保存到同一服务器的另一个驱动器中D 驾驶 我想我无法获取以下位置的物理位置D 驾驶使用Server MapPath因为它位
  • 如何从Web JavaScript应用程序获取桌面C#程序中的变量

    我遇到一个问题 有两个应用程序 一种是 C 中的桌面应用程序 另一种是 javascript 中的 Web 应用程序 运行桌面应用程序中的一些变量或信息需要传输到Web应用程序 有谁知道如何解决这个问题 有人愿意提供更多细节来解决这个问题吗
  • 为什么这个单独的定义会导致错误?

    挑战 我有这段代码无法编译 你能找出问题所在吗 有一次让我很头疼 header namespace values extern std string address extern int port cpp file std string v
  • 三种 System.Drawing 方法表现出缓慢的绘制或闪烁:解决方案?或其他选择?

    我正在通过 System Drawing 进行一些绘图 但遇到了一些问题 我将数据保存在队列中 并将该数据绘制 绘制 到三个图片框中 此方法填充图片框 然后滚动图形 所以不要在以前的绘图上绘制 并且逐渐看起来更混乱 我找到了两种绘制图表的解
  • 执行存储过程时 ExecuteNonQuery() 返回 -1

    我正在尝试在 Visual Studio 中执行存储过程 下面给出 CREATE PROCEDURE dbo addStudent stuName varchar 50 address varchar 100 tel varchar 15
  • Nuget - 对象引用未设置为对象的实例

    我在 vs 2015 中遇到了 nuget 包管理器的问题 像Unity这样的一些包已经安装没有问题了 某些软件包 例如 EF 在安装时出现问题 像 Automapper 这样的一些软件包也有同样的问题 但是当我安装这个软件包的另一个版本时
  • 如何组合||条件语句中的运算符[重复]

    这个问题在这里已经有答案了 代替 if foo 1 foo 5 foo 9 我喜欢将它们组合起来 类似于以下内容 这不起作用 if foo 1 5 9 那可能吗 不幸的是不是 你最好的选择是创建一个扩展方法 public static bo
  • 在Framework 4.6项目中使用.net core DLL

    我已经在 net core 2 0 中构建了一个 DLL 现在我想在使用 net 4 6 1 框架的 WinForms 项目中使用它 我可以引用该 dll 但收到 System IO FileLoadException 表示找不到 Syst

随机推荐

  • 我的笔记本电脑键盘左ctrl键和fn键功能互换了

    进入BIOS设置 Device Option中将Swap Fn Ctrl Key的属性设为Disabled
  • 轻量级域名解析服务器之dnsmasq

    1 dnsmasq的简介 dnsmasq提供DNS缓存和DHCP服务功能 作为域名解析服务器 DNS dnsmasq可以通过缓存DNS请求来提高对访问过的网址的连接速度 作为DHCP服务器 dnsmasq可以用于为局域网电脑分配内网ip地址
  • Python基础3.3--for循环

    首先来说下for循环 for循环是python语言的循环控制语句 for循环可以遍历任何序列的项目 包括序列集合或可迭代对象 如列表 字符串 元组 字典等 看下基本语法 for 变量 in 序列 变量为任意值 序列为列表 元组 字符串等 子
  • Go For Web:一篇文章带你用 Go 搭建一个最简单的 Web 服务、了解 Golang 运行 web 的原理

    前言 本文作为解决如何通过 Golang 来编写 Web 应用这个问题的前瞻 对 Golang 中的 Web 基础部分进行一个简单的介绍 目前 Go 拥有成熟的 Http 处理包 所以我们去编写一个做任何事情的动态 Web 程序应该是很轻松
  • Java中的float浮点数的二进制存储及运算

    float在内存中的数据格式及其转byte数组原理及转换过程 float在计算机的存储 四个字节 共有32位 以 符号 移位数 底数 的方式存储 三者的计算 第一位是符号 往后8位是 移位数 再往后23位是 底数 32位的格式排列就是 AB
  • SpringBoot使用 @Async实现优雅的异步调用

    点击关注 Java基基 2022 04 09 11 50 收录于话题 Java基基908个 点击上方 Java基基 选择 设为星标 做积极的人 而不是积极废人 每天 14 00 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 20
  • SQL2000 函数递归显示路径

    Author htl258 Tony Date 2011 05 19 17 25 59 Version Microsoft SQL Server 2008 RTM 10 0 1600 22 Intel X86 Jul 9 2008 14 4
  • git学习记录4-----更改提交操作

    git学习记录4 更改提交操作 回溯历史版本 回溯到feature A之前 创建fix B 推进至feature A后的状态 合并fix B 查看冲突部分并将其解决 提交解决后的结果 修改提交信息 下次见 回溯历史版本 回溯到feature
  • useEffect默认执行两次解决方法

    转自 https blog csdn net SJJ980724 article details 126144594 代码如下 useEffect gt console log useEffect调用了 刷新页面初始化打印发现 useEff
  • spring集成web环境(配置全局参数、web.xml配置监听器)

    配置全局参数 全局参数主要是为了解耦 位置 web WEB INF web xml
  • 计算机进入系统黑屏,电脑进入系统后黑屏,教您电脑进入系统后黑屏怎么办

    在使用电脑的过程中 方便我们的同时 也会出现很多问题 比如说曾经遇到过这样的问题 打开电脑 显示几个开机字样之后 电脑就黑屏了 这时仅仅能看到一个可移动的鼠标光标 怎么办 下面 小编就跟大伙介绍电脑进入系统后黑屏的修复方法 现代社会 电脑已
  • MySql的JDBC连接url地址的各项配置说明及所解决的问题

    首先看一条jdbc的url地址 url jdbc mysql 127 0 0 1 3306 test useAffectedRows true autoReconnect true useUnicode true characterEnco
  • CSS之行高(line-height)详解

    行高 line height 1 浏览器中默认文字大小为16px 2 浏览器中默认文字行高为18px 行高 文字大小 上下间距 1 通过设置文字的行高 改变的就是文字的上下间距 2 如果不设置行高 文字的大小可以影响行高值 3 文字的字体也
  • VMware vCenter Server 7.0.3 安装

    VMware vCenter Server 7 0 3 安装 文章目录 VMware vCenter Server 7 0 3 安装 1 安装 vcenter 1 1 第一阶段 1 2 第二阶段 2 exsi 查看 vcenter 3 部署
  • TiKV源码分析(一)RaftKV层

    关于TiDB与TiKV学习总结 本章序 关于RaftStore层 从RaftBatchSystem开始 状态机做了什么 mailbox注册与tx rx通道设置 消息收发与处理 Peer中的具体操作 Apply中的具体操作 一些琐碎信息 本章
  • 数据结构-栈的顺序存储结构(C++实现)

    目录 1 声明栈的结构体 2 初始化栈顶 3 添加元素至栈顶 4 删除栈顶元素 5 显示栈 整段代码 1 声明栈的结构体 结构体内声明一个data用来存放栈数据 top用来指向栈顶 typedef int ElemType typedef
  • 关于SOC、态势感知,5种常见的关联分析模型

    引言 在很多安全分析类产品建设的过程中都会涉及到关联分析 比如日志分析 soc 态势感知 风控等产品 关联分析可以认为是这类产品中最核心的能力之一 这个东西从名字上看就知道 千人千面 每个人的想法和理解都不一样 很多甲方都会提关联分析 但你
  • vue 路由切换动画(滑入,滑出效果)

    最近做的一个小项目 需要做路由切换 页面滑入滑出的效果 总结下实现的思路和方法 router view 用 transition 标签包裹 router view 组件 动态添加动画名 data 里定义transitionName变量
  • 四种访问修饰符

    Java中修饰符分为两种 访问修饰符和非访问修饰符 修饰符中 有一些修饰符可以既可以修饰类 也可以修饰方法 但是有一些修饰符只能修饰符方法 今天这篇文章先介绍一下四种访问修饰符 1 private修饰符 private表示私有的 既然是私有
  • C++ 大话设计之《简单工厂模式》(优缺点,设计原理,常用场景)

    简单工厂是一种创建型模式 优点 简单工厂模式能够提高生产效率和生产力 缺点 简单工厂模式将所有产品的创建逻辑集中在一个工厂类中 一旦这个工厂类出现问题 整个系统都会受到影响 如果要添加新的产品类 需要修改工厂类的代码 违反了开闭原则 对扩展