【14】c++设计模式——>工厂模式

简单工厂模式的弊端

简单工厂模式虽然简单,但是违反了设计模式中的开放封闭原则,即工厂类在数据增加时需要被修改,而我们在设计时对于已经设计好的类需要避免修改的操作,而选用扩展的方式。

工厂模式设计

简单工厂模式只有一个工厂类,而工厂模式是有一个基类,多个子类,基类中包含一个虚工厂函数,多个子类重写父类的工厂函数。每个子工厂类负责生产一种类,这相当于再次解耦,将工厂类再次拆分细化。

代码实例

#include <iostream>
using namespace std;//创建父类
class AbstructSmile
{
public:virtual void transform() = 0;virtual void ability() = 0;virtual ~AbstructSmile() {} //提供虚析构函数,为了能够释放子类对象
};class sheepSmile : public AbstructSmile
{
public:void transform() override{cout << "山羊恶魔果实" << endl;}void ability() override{cout << "山羊能力" << endl;}
};class lionSmile : public AbstructSmile
{
public:void transform() override{cout << "狮子恶魔果实" << endl;}void ability() override{cout << "狮子能力" << endl;}
};class batSmile : public AbstructSmile
{
public:void transform() override{cout << "蝙蝠恶魔果实" << endl;}void ability() override{cout << "蝙蝠能力" << endl;}
};
enum class Type :char {SHEEP,LION,BAT};
//创建工厂类--->基类
class smileFactory
{
public:virtual ~smileFactory() {}virtual AbstructSmile* creatsmile() = 0;
};class sheepFactory : public smileFactory
{
public:AbstructSmile* creatsmile() override{return new sheepSmile;} ~sheepFactory() {cout << "sheepFactory 被析构了" << endl;}
};class lionFactory : public smileFactory
{
public:AbstructSmile* creatsmile() override{return new lionSmile;}~lionFactory(){cout << "lionFactory 被析构了" << endl;}
};class batFactory : public smileFactory
{
public:AbstructSmile* creatsmile() override{return new batSmile;}~batFactory(){cout << "batFactory 被析构了" << endl;}
};
int main()
{smileFactory* sheepPtr = new sheepFactory; AbstructSmile* sheepObj = (AbstructSmile*)(sheepPtr->creatsmile());sheepObj->transform();sheepObj->ability();smileFactory* lionPtr = new lionFactory;AbstructSmile* lionObj = (AbstructSmile*)(lionPtr->creatsmile());lionObj->transform();lionObj->ability();smileFactory* batPtr = new batFactory;AbstructSmile* batObj = (AbstructSmile*)(batPtr->creatsmile());batObj->transform();batObj->ability();delete sheepObj;delete sheepPtr;delete lionObj;delete lionPtr;delete batObj;delete batPtr;return 0;
}

在这里插入图片描述

抽象类

抽象类不能直接构造对象,因为他是一种抽象的概念,没有具体的实现,如果想对象一个对象,需要创建一个继承自抽象类的具体类,并在该类中实现所有的纯虚函数,然后可以构造该具体类。
在这里插入图片描述

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

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

相关文章

河北吉力宝:国内顶尖资源荣誉共筑全景融合新商业生态

随着科技的不断发展和社会的进步&#xff0c;新兴企业纷纷崭露头角&#xff0c;展现出令人瞩目的商业潜力。随着科技的不断演进和社会的持续进步&#xff0c;新兴企业正崭露头角&#xff0c;显露出巨大的商机。在这个时代&#xff0c;合作和资源整合变得至关重要。河北吉力宝智…

【java爬虫】使用vue+element-plus编写一个简单的管理页面

前言 前面我们已经将某宝联盟的数据获取下来了&#xff0c;并且编写了一个接口将数据返回&#xff0c;现在我们需要使用vueelement-plus编写一个简单的管理页面进行数据展示&#xff0c;由于第一次使用vue编写前端项目&#xff0c;所以只是编写了一个非常简单的页面。 项目结…

高速数字化仪为您带来高效RF测量秘籍!(二)

上一章主要介绍了虹科高速数字化仪的特点、RF测试选型以及RF动态范围测量示例&#xff0c;本章将继续为大家介绍多通道采集分析正交调制信号、RF频率响应测量等内容。 RF测试分析 数字化仪获取数据并将其用于测量和分析。在这些例子中&#xff0c;虹科SBench6用于分析测试数据…

对干扰SAY NO!GNSS模拟将提供伽利略OS-NMA功能(一)

新一代卫星应用程序依赖灵活且准确的GNSS信号作为许多关键项目的重点要素&#xff0c;以确保高精度的定位、导航和授时&#xff08;PNT&#xff09;数据。虹科Safran提供了GNSS仿真测试解决方案&#xff0c;旨在确保复杂GNSS应用系统的高性能、高弹性和高准确性。 现状 GNSS技…

位移贴图和法线贴图的区别

位移贴图和法线贴图都是用于增强模型表面细节和真实感的纹理贴图技术&#xff0c;但是它们之间也存在着差异。 1、什么是位移贴图 位移贴图&#xff1a;位移贴图通过在模型顶点上定义位移值来改变模型表面的形状。该贴图包含了每个像素的高度值信息&#xff0c;使得模型的细节…

2023年中国短租公寓主要类型、品牌及行业市场规模分析[图]

短租是一种以24小时为计量单位、按天计费的房屋租赁形式&#xff0c;短租又称日租。短租房有高性价比、特色、浓厚居家感的特点&#xff0c;比起传统酒店的客房更具竞争优势。当前&#xff0c;短租房已经成为人们出行住宿的新选择。短租公寓主要类型有合租公寓、月租公寓、服务…

Python 数据分析与挖掘(一)

Python 数据分析与挖掘&#xff08;数据探索&#xff09; 数据探索 1.1 需要掌握的工具&#xff08;库&#xff09; 1.1.1 Nump库 Numpy 提供多维数组对象和各种派生对象&#xff08;类矩阵&#xff09;&#xff0c;利用应用程序接口可以实现大量且繁琐的数据运算。可以构建…

Minecraft个人服务器搭建自己的皮肤站并实现外置登录更换自定义皮肤组件

Minecraft个人服务器搭建自己的皮肤站并实现外置登录更换自定义皮肤组件 大家好&#xff0c;我是艾西有不少小伙伴非常喜欢我的世界Minecraft游戏&#xff0c;今天小编跟大家分享下Minecraft个人服务器怎么设置皮肤站。 Minecraft皮肤站是什么&#xff1f;其实官网就有皮肤站…

Overloud TH-U Complete for Mac:演绎您的音乐世界

Overloud TH-U Complete for Mac是一款功能强大的吉他谱曲软件&#xff0c;可以让您在Mac电脑上轻松进行吉他模拟、录音和混音等操作&#xff0c;创作属于自己的音乐作品。 Overloud TH-U Complete for Mac提供了丰富的吉他模拟和音效库&#xff0c;涵盖了多种吉他放大器、箱体…

腾讯云服务器简介_CVM优势_常见问题解答

腾讯云服务器CVM提供安全可靠的弹性计算服务&#xff0c;腾讯云明星级云服务器&#xff0c;弹性计算实时扩展或缩减计算资源&#xff0c;支持包年包月、按量计费和竞价实例计费模式&#xff0c;CVM提供多种CPU、内存、硬盘和带宽可以灵活调整的实例规格&#xff0c;提供9个9的数…

1600*C. Good Subarrays(找规律前缀和)

Problem - 1398C - Codeforces 解析&#xff1a; 可以写出 sum[ j ] - sum[ i ] j - i 1&#xff0c;对其移项得 sum[ j ] - j sum[ i ] - &#xff08;i - 1&#xff09;&#xff0c;问题转换为有多少个前缀和相等&#xff0c;则用map遍历统计一遍即可。 注意&#xff0c;当…

数据结构——AVL树(详解 + C++模拟实现)

文章目录 前言AVL树的概念AVL树节点的定义AVL树类框架AVL树的插入AVL树的旋转新节点插入较高子树的左侧 —— 左左: 右单旋新节点插入较高右子树的右侧——右右: 左单旋新节点插入较高左子树的右侧 —— 左右&#xff1a; 先左单旋然后再有单旋新节点插入较高右子树的左侧&…

【JavaEE重点知识归纳】第5节:方法

目录 一&#xff1a;方法的概念和使用 1.什么是方法 2.方法的定义 3.方法的调用过程 4.实参和形参的关系&#xff08;重点&#xff09; 二:方法重载 1.方法重载概念 2.方法签名 三&#xff1a;递归 1.递归的概念 2.递归执行的过程分析 一&#xff1a;方法的概念和使…

qt 5.15.2 安卓 macos

macos环境安卓配置 我的系统是monterey12.5.1 打开qt的配置界面 这里版本是java1.8&#xff0c;注意修改这个json文件&#xff0c;显示包内容 {"common": {"sdk_tools_url": {"linux": "https://dl.google.com/android/repository/comm…

1500*B. Zero Array(贪心数学找规律)

Problem - 1201B - Codeforces 解析&#xff1a; 因为每次减少2&#xff0c;如果总和为奇数肯定无法实现。 特例&#xff0c;如果某个数大于其他所有数的总和&#xff0c;同样无法实现。 其他均可实现。 #include<bits/stdc.h> using namespace std; #define int long l…

给 Linux0.11 添加网络通信功能 (Day1: 确认 qemu-system-i386 提供了虚拟网卡)

感觉单纯读闪客的文章&#xff0c;以及读 Linux0.11 源码&#xff0c;而不亲自动手做点什么&#xff0c;很难学会&#xff0c;还是得写代码 定个大目标&#xff1a;给 Linux0.11 添加网络通信功能 今日的小目标&#xff1a;先确认 qemu-system-i386 提供了网卡功能 here we …

C++入门-day03

引言&#xff1a;本节我们讲一下C中的引用 一、引用 先看一下下面这段代码&#xff1a; 在这段代码中。我们命名了两个变量&#xff0c;a和_a&#xff0c;其中_a就是a的引用 所谓引用就是a的“别名”&#xff0c;我们看一下这段代码的运行结果&#xff1a; 发现其地址一样&…

导出视频里的字幕

导出视频里的字幕 如何利用剪映快速提取并导出视频里的字幕 https://jingyan.baidu.com/article/c35dbcb0881b6fc817fcbcd2.html 如何快速提取视频中的字幕&#xff1f;给大家介绍一种简单高效又免费的提取方法。需要利用到“剪映”&#xff0c;以下是具体的操作步骤和指引&a…

计算机专业毕业设计项目推荐11-博客项目(Go+Vue+Mysql)

博客项目&#xff08;GoVueMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以及模式&am…