【设计模式】创建型模式
系列综述:
- xxx
- xxx
- xxx
文章目录
- 对象创建型模式
- 简单(静态)工厂模式
- 工厂方法模式
- 参考博客
😊点此到文末惊喜↩︎
对象创建型模式
简单(静态)工厂模式
- 抽象原理
- 抽象产品基类 :定义了产品的规范,描述了产品的主要特性和功能。
- 具体产品子类 :实现或者继承抽象产品的子类
- 静态工厂类 :提供了创建产品的方法,调用者通过该方法来获取产品。
- 代码原理
- 基类:数据成员+虚函数接口(动态基础)
- 派生类:实现虚函数,即实现类的具体功能
- 静态工厂类:使用switch结构根据传入的参数动态new对应子类对象
- 调用:使用基类对象承接静态工厂动态生成对应子类对象赋值给父类
- 特点:
- 破坏开闭原则。拓展产品需要修改原工厂内部的逻辑
- 符合单一职责原则。将对象的
创建逻辑
和实现的业务逻辑
进行了分离
- 示例代码
// 基类:纯虚函数接口(抽象的规则)+ 规则操作的数据成员
class Operation
{
public:// virtual int GetResult() =0;
public:double m_Num1;double m_Num2;
};
// 算法子类1:重新父类虚函数,实现算法
class OperationAdd:Public Operation
{
public:int GetResult();
};
// 算法子类2:重新父类虚函数,实现算法
class OperationSub:Public Operation
{
public:int GetResult();
};// 静态工厂类:根据对象实例化
class OperationFactry
{
public:OperationFactry(void);~OperationFactry(void);
public:// static主要功能是无需创建类,就可以调用方法static Operation CreateOperate(int n ){switch(n){case 1:return new OperationAdd;break;case 2:return new OperationSub;break;}}
};// 调用
Operation oper;
oper = OperationFactry.CreateOperate("+");// 使用工厂动态生成对应子类对象赋值给父类
oper.m_Num1 = 1;// 给父类对象的数据成员进行赋值
oper.m_Num2 = 2;
double result = oper.GetResult();
工厂方法模式
- 将简单工厂模式中
工厂类的分支
导致的与对象创建的耦合
使用抽象类进行解决
// 工厂方法接口类:根据对象实例化
interface IFactory{Operation CreateOperate();
}// 工厂子类
class OperationAddFactory : IFactory{public Operation CreateOperate(){return new OperationAdd();}
}
class OperationSubFactory : IFactory{public Operation CreateOperate(){return new OperationSub();}
}// 调用
IFactory factory = new OperationXXXFactory();// 实例化工厂对象
Operation oper = factory. CreateOperate();// 使用工厂动态生成对应子类对象赋值给父类
oper.m_Num1 = 1;// 给父 类对象的数据成员进行赋值
oper.m_Num2 = 2;
double result = oper.GetResult();
🚩点此跳转到首行↩︎
参考博客
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用
相关文章:
【设计模式】创建型模式
简单工厂模式 系列综述: xxxxxxxxx 文章目录对象创建型模式简单(静态)工厂模式工厂方法模式参考博客😊点此到文末惊喜↩︎ 对象创建型模式 简单(静态)工厂模式 抽象原理 抽象产品基类 :定义了…...
Spark Catalyst 查询优化器原理
这里我们讲解一下SparkSQL的优化器系统Catalyst,Catalyst本质就是一个SQL查询的优化器,而且和 大多数当前的大数据SQL处理引擎设计基本相同(Impala、Presto、Hive(Calcite)等)。了解Catalyst的SQL优化流程&…...
贝叶斯分析法在市场调研中的应用
一、市场调研的需求场景 在营销活动的用研调研时,我们经常会去问用户在不同平台的品类付费情况,以对比大促期间本品和竞品分别在哪些品类上具有市场优势,他们之间的差距具体在哪里、差距有多大。假如根据调研问卷结果,我们知道拼多多用户有30%的人在大促购买生鲜类,而淘宝…...
JavaEE——MyBatis将查询结果集封装进POJO实体类
简单介绍 在之前的我们比较详细的介绍过MyBatis的配置信息的时候,在SQL映射文件中说过我们可以直接将结果集映射到我们的POJO实体类中,省去了我们自己处理查询结果集的时间和代码,接下来我们就来演示将单条数据和多条数据映射到我们POJO实体…...
C++11 包装器function
文章首发公众号:iDoitnow C提供了多个包装器,它们主要是为了给其他编程接口提供更一致或更合适的接口。C11提供了多个包装器,这里我们重点了解一下包装器function。 对于function, C 参考手册给出的定义为: 类模板 std::function…...
XCP实战系列介绍14-基于Vector_Davinci工具的XCP配置介绍(三)
本文框架 1.概述2. 其他模块配置2.1 XCP初始化3. 手工代码部分3.1 周期函数添加3.2 DAQ Event调用3.3 XCP模块本身代码3.4 标定量的添加1.概述 在对XCP的配置部分介绍中我们计划分别对通讯部分配置、XCP模块本身配置及其他相关模块配置三篇进行介绍,在前两篇我们介绍了XCP配置…...
计算机图形学:中点BH算法对任意斜率的直线扫描转换方法
作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、问题提出二、…...
(十一)、用户中心页面【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】
1,个人中心页面 1.1 新建个人中心页面 1.2 纯净版个人中心页面代码: <template><view class"user"><view class"top"><view class"group"><view class"userinfo"><!-- 顶部 左侧 头像 …...
LA@复数和复矩阵@实对称阵相关定理
文章目录复数🎈复矩阵和复向量共轭矩阵性质定理实对称阵的相关定理复数🎈 复数 (数学) (wikipedia.org) 加法:(abi)(cdi)(ac)(bd)i)减法:(abi)−(cdi)(a−c)(b−d)i)乘法:(abi)(cdi)acbciadibdi2(ac−bd)(bcad)i除法&…...
cmd set命令笔记
使用 set是cmd最基础的命令,每个人都会用,但其实它还是有些知识的。 set 用来接收入参 set /p var请选择(1或2或3): echo %var%可以接收输入的参数。 set /p var请选择(1或2或3): echo %var% 语法 he…...
IB学校获得IBO授权究竟有多难?
IB 学校认证之路,道阻且长 The road to IB school accreditation is long and difficult一所学校能获得IB授权必须经过IBO非常严格的审核,在办学使命&教育理念、组织架构、师资力量&授课技能、学校硬件设施和课程体系上完全符合标准才可获得授权…...
火山引擎 DataTester:A/B 测试,让企业摆脱广告投放“乱烧钱”
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 在广告投放的场景下,一线广告优化师通常会创建多个计划,去测试不同的广告素材效果。这套方法看似科学,实际上却存在诸多问题&…...
黑马redis学习记录:缓存
一、介绍 什么是缓存? 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码 缓存无处不在 为什么要使用缓存? 因为速度快,好用缓存数据存储于代码中,而…...
CD20靶向药物|适应症|市场销售-上市药品前景分析
CD20是靶向治疗的第一个靶点,是B细胞淋巴瘤的现代治疗药物。CD20作为治疗剂的使用被认为是方便的,原因有二。首先,在 CD20 阳性肿瘤的情况下,这种受体大量存在于 B 淋巴细胞表面——每个细胞大约有十万个分子。其次,干…...
多源 复制
使复制从属服务器能够同时从多个主服务器接收事务至少需要两个主服务器和一个从属服务器设备从属服务器为每个主服务器创建一个 复制通道从属服务器必须使用基于表的资料档案库多源复制与基于文件的资料档案库不兼容不尝试检测或解决冲突如果需要此功能,则由应用程序…...
微服务项目【消息推送(RabbitMQ)】
创建消费者 第1步:基于Spring Initialzr方式创建zmall-rabbitmq消费者模块 第2步:在公共模块中添加rabbitmq相关依赖 <!--rabbitmq--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…...
vr电力刀闸事故应急演练实训系统开发
电力事故是在电力生产和输电过程中可能发生的意外事件,它们可能会对人们的生命财产安全造成严重的威胁。因此,电力事故应急演练显得尤为重要。而VR技术则可以为电力事故应急演练提供一种全新的解决方案。 在虚拟环境中,元宇宙VR会模拟各种触电…...
C++类和对象补充
目录 前言: 1. 构造函数->初始化列表 1.1 初始化列表出现原因 1.2 初始化列表写法 2. explicit关键字 2.1 explict的出现 2.2 explict的写法 3. static成员 4. 友元 4.1 友元函数 4.2 友元类 5. 内部类和匿名对象 5.1 内部类 5.2 匿名对象 前言&a…...
08 SpringCloud 微服务网关Gateway组件
网关简介 大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢? 如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去用。 这样的架构,会存…...
极验3代 加密分析
目标链接 aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5odG1s接口分析 极验参数重要信息 gt和challenge;gt是固定的,但是challenge每次请求会产生不同的,这里的请求的并没有什么加密参数。 下一个请求 gettype.php,…...
python 数据分析可视化实战 超全 附完整代码数据
代码数据:https://download.csdn.net/download/qq_38735017/873799141.1 数据预处理1.1.1 异常值检测①将支付时间转为标准时间的过程中发生错误,经排查错误数据为‘2017/2/29’,后将其修改为‘2017/2/27’。②经检测发现部分订单应付金额与实付金额都为…...
有趣的HTML实例(十三) 咖啡选择(css+js)
一个人追求目标的路途是孤单的,一个人独品辛酸的时候是寂寥的,一个人马不停蹄的追赶着,狂奔着,相信前方是一片光明,我从不放弃希望,就像我对生活的信念,没有人可以动摇。 ——《北京青年》 目录…...
【力扣-LeetCode】1139. 最大的以 1 为边界的正方形 C++题解
1139. 最大的以 1 为边界的正方形难度中等137收藏分享切换为英文接收动态反馈给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0。示例 1…...
【JavaGuide面试总结】Redis篇·下
【JavaGuide面试总结】Redis篇下1.如何使用 Redis 事务?2.如何解决 Redis 事务的缺陷?3.说说Redis bigkey吧4.大量 key 集中过期问题怎么解决的5.如何保证缓存和数据库数据的一致性?6.缓存穿透有哪些解决办法?7.缓存击穿有哪些解决…...
ForkJoinPool原理
1、概述 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架。ForkJoinPool是Java中提供了一个线程池,特点是用来执行分治任务。主题思想是将大任务分解为小任务,然后继续将小任务分解,直至能够直接解决为止,然后再依次将任…...
02 python基本语法和数据类型
基本语法 python脚本可以在python交互式shell或者代码编辑器中编写与运行。python文件的扩展名一般为.py python使用缩进来区分不同的代码块,此特性有利于提高代码可读性。 下面是一个简单的python条件语句代码: 小明=矮穷错 小红=白富美 小华=高富帅 小李=程序员某人 = &quo…...
【办公类-16-09】“2022下学期 大班运动场地分配表-跳过节日循环排序”(python 排班表系列)
样例展示:跳过节日的运动场地循环排序表(8个班级8组内容 下学期一共20周)背景需求:上学期做过一次大班运动场地安排,跳过节日。2023.2下学期运动场地排班(跳过节日)又来了。一、场地器械微调二、…...
全网多种方法分析解决HTTP Status 404资源未找到的错误,TCP的3次握手,dns域名解析,发起http请求以及cookie和session的区别
文章目录1. 文章引言2. 简述URL3. http完整请求3.1 DNS域名解析3.2 TCP的3次握手3.3 发起http请求3.4 浏览器解析html代码3.5 浏览器对页面进行渲染呈现给用户4. 解决404错误的方法5. 补充知识点5.1 cookie和session的区别5.2 ChatGPT的介绍1. 文章引言 正赶上最近ChatGPT很火…...
Django图书商场购物系统python毕业设计项目推荐
mysql数据库进行开发,实现了首页、个人中心、用户管理、卖家管理、图书类型管理、图书信息管理、订单管理、系统管理等内容进行管理,本系统具有良好的兼容性和适应性,为用户提供更多的网上图书商城信息,也提供了良好的平台&#x…...
基于模型预测控制(MPC)的悬架系统仿真分析
目录 前言 1.悬架系统 2.基于MPC的悬架系统仿真分析 2.1 simulink模型 2.2仿真结果 2.3 结论 3 总结 前言 模型预测控制是无人驾驶中较为热门的控制算法,但是对于悬架等这类系统的控制同样适用。 我们知道模型预测控制主要可以划分为三个部分: …...
wordpress中文视频插件/太原关键词排名优化
作者:Bolaji Ayodeji翻译:疯狂的技术宅原文:https://www.freecodecamp.org/news/manipulating-arrays-in-javascript/未经允许严禁转载JavaScript 中的数组是什么?在开始之前,你需要先了解数组的真正含义。在 JavaScri…...
网站seo工程师怎么做/如何推广软件
菜鸟教程命令大全 http://www.runoob.com/linux/linux-command-manual.html 命令大全: http://man.linuxde.net/ tab :自动补全 Ctrll 清屏 (类似于clear命令) CtrlU 清空当前输入 ctrlc 关闭 man command 帮助 man :manual : 手工&…...
成都网站维护多少钱/爱论坛
五一回来后,发现同事的电脑不能正常由grub引导了,自动进入了gurb的命令行状态。估计是有人动过,但是还好同事没有到岗所以有时间修好。 使用kernel 与initrd命令引导进入了linux,发现可以正常进入,说明只是引导的问题&…...
wordpress推广得积分/网络软文营销案例3篇
开源分析数据库 ClickHouse 以快著称,真的如此吗?我们通过对比测试来验证一下。ClickHouse vs Oracle先用 ClickHouse(简称 CH)、Oracle 数据库(简称 ORA)一起在相同的软硬件环境下做对比测试。测试基准使用…...
wordpress默认注册框/seo定义
前言 这和背包没什么事吧hh 传送门 : 思路 一开始以为摘花生的那种题,结果发现是需要求出所有的路径方案,因为数据范围很小 所以我们可以采用f[i][j][k]f[i][j][k]f[i][j][k]三层循环 来dpdpdp 表示第iii行第jjj列值为kkk的可能是否存在 然后通过形如线性DP的那种状态转移…...
wordpress支持系统/网站建设流程是什么
实网测试,可以理解为在用户实际网络环境资源进行测试的行为。为何需要实网测试呢? 单机的应用软件越来越少,当下的应用软件都需要涉及与服务器之间的交互,尤其是当前火热的云服务应用软件。 目前比较流行的网络视频播放软件&…...