当前位置: 首页 > news >正文

大话设计模式之工厂模式

工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需指定将要创建的对象的确切类。通过使用工厂模式,我们可以将对象的创建和使用分离,从而使代码更具灵活性和可维护性。

在工厂模式中,通常会有三种角色:

  1. 工厂接口(Factory Interface):声明了一个用于创建对象的接口,这样所有具体工厂类都必须实现该接口。

  2. 具体工厂(Concrete Factory):实现了工厂接口,负责创建具体的产品对象。

  3. 产品接口(Product Interface):声明了产品对象的接口,这样具体的产品类都必须实现该接口。

  4. 具体产品(Concrete Product):实现了产品接口,是由具体工厂创建的对象。

#include <iostream>// 产品接口
class Shape {
public:virtual void draw() = 0;
};// 具体产品:Circle
class Circle : public Shape {
public:void draw() override {std::cout << "Inside Circle::draw() method." << std::endl;}
};// 具体产品:Rectangle
class Rectangle : public Shape {
public:void draw() override {std::cout << "Inside Rectangle::draw() method." << std::endl;}
};// 工厂接口
class ShapeFactory {
public:virtual Shape* createShape() = 0;
};// 具体工厂:CircleFactory
class CircleFactory : public ShapeFactory {
public:Shape* createShape() override {return new Circle();}
};// 具体工厂:RectangleFactory
class RectangleFactory : public ShapeFactory {
public:Shape* createShape() override {return new Rectangle();}
};int main(int argc, char *argv[])
{// 使用工厂创建圆形ShapeFactory* circleFactory = new CircleFactory();Shape* circle = circleFactory->createShape();circle->draw();// 使用工厂创建矩形ShapeFactory* rectangleFactory = new RectangleFactory();Shape* rectangle = rectangleFactory->createShape();rectangle->draw();delete circleFactory;delete circle;delete rectangleFactory;delete rectangle;return 0;
}/*
在这个示例中,Shape 是产品接口,Circle 和 Rectangle 是具体产品类,ShapeFactory 是工厂接口,CircleFactory 和 RectangleFactory 是具体工厂类。通过工厂模式,我们可以根据不同的需求使用不同的工厂来创建不同的产品对象,而不需要直接使用具体的产品类。工厂模式能够帮助我们遵循开闭原则,因为在需要添加新的产品时,只需要创建新的具体产品和对应的具体工厂,而不需要修改现有的代码。
*/

觉得有帮助的话,打赏一下呗。。

           

相关文章:

大话设计模式之工厂模式

工厂模式&#xff08;Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种创建对象的最佳方式&#xff0c;而无需指定将要创建的对象的确切类。通过使用工厂模式&#xff0c;我们可以将对象的创建和使用分离&#xff0c;从而使代码更具灵活性和可维护性。…...

Windows MySQL通过data 文件夹恢复数据

前言 在MySql数据库中,为了备份和恢复数据,通常会使用mysqldump工具来导出和导入数据。但是&#xff0c;如果数据库非常大&#xff0c;name导出和导入数据可能会需要很长时间。这时&#xff0c;一种更快速的备份和恢复数据的方式就是直接复制mysql的data文件夹。 什么是mysql的…...

ARP协议定义及工作原理

ARP的定义 地址解析协议(Address Resolution Protocol&#xff0c;ARP)&#xff1a;ARP协议可以将IPv4地址(一种逻辑地址)转换为各种网络所需的硬件地址(一种物理地址)。换句话说&#xff0c;所谓的地址解析的目标就是发现逻辑地址与物理地址的映射关系。 ARP仅用于IPv4协议&a…...

express实现用户登录和注册接口

目录 1 创建数据库2 连接数据库3 集成ORM库4 创建业务逻辑5 创建路由7 测试接口总结 我们在编写后端接口的时候操作数据库是一种常见的功能需求&#xff0c;express本身并不提供直接操作数据库的能力&#xff0c;需要借助第三方库来操作数据库&#xff0c;本篇讲解一下软件开发…...

数字化转型,效率增长才是王道

在当今商业世界&#xff0c;数字化已经成为推动企业增长的强大引擎。然而&#xff0c;值得注意的是&#xff0c;数字化并非只是简单地追求规模扩张&#xff0c;更重要的是实现降本增效。没有效率的增长&#xff0c;就像是在加速自我毁灭。在数字化转型的道路上&#xff0c;企业…...

RHCE-2-chrony服务器

简介 重要性 由于IT系统中&#xff0c;准确的计时非常重要&#xff0c;有很多种原因需要准确计时&#xff1a; 在网络传输中&#xff0c;数据包括和日志需要准确的时间戳 各种应用程序中&#xff0c;如订单信息&#xff0c;交易信息等 都需要准确的时间戳 Linux的两个时钟 硬…...

音频RK809

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、目的二、知识准备2.1Audio框架2.1.1 DAI2.1.2 CODEC2.1.3 machine三、原理图3.1 整体原理图3.2 喇叭部分3.3 麦克风部分四、设备树4.1 sound 部分4.2 codec 部分五、驱动讲...

解决 linux 服务器 java 命令不生效问题

在Linux系统中&#xff0c;当你安装Java并设置了JAVA_HOME环境变量后&#xff0c;你可能需要使用source /etc/profile命令来使Java命令生效。这是因为/etc/profile是一个系统级的配置文件&#xff0c;它包含了系统的全局环境变量设置。 但是需要注意的是&#xff0c;source /e…...

22 多态

目录 多态的概念多态的定义及实现抽象类多态的原理单继承和多继承关系中的虚函数表继承和多态常见的面试问题 前言 需要声明的&#xff0c;下面的代码和解释的哦朴实vs2013x86环境&#xff0c;涉及指针是4bytes&#xff0c;如果要其他平台下&#xff0c;部分代码需要改动。比…...

排序算法超详细代码和知识点整理(java版)

排序 1、冒泡排序 ​ 两层循环&#xff0c;相邻两个进行比较&#xff0c;大的推到后面去&#xff0c;一共比较“数组长度”轮&#xff0c;每一轮都是从第一个元素开始比较&#xff0c;每一轮比较都会将一个元素固定到数组最后的一个位置。【其实就是不停的把元素往后堆&#…...

Java复习第十二天学习笔记(JDBC),附有道云笔记链接

【有道云笔记】十二 3.28 JDBC https://note.youdao.com/s/HsgmqRMw 一、JDBC简介 面向接口编程 在JDBC里面Java这个公司只是提供了一套接口Connection、Statement、ResultSet&#xff0c;每个数据库厂商实现了这套接口&#xff0c;例如MySql公司实现了&#xff1a;MySql驱动…...

Python从零到一构建GPT模型

只用Python和 torch框架&#xff0c;从零到一构建GPT模型&#xff0c;对大语言模型入门&#xff0c;了解GPT的内部网络结构&#xff0c;是一个很好示例。 Build_GPT_from_Scratch.ipynb...

V R虚拟现实元宇宙的前景|虚拟现实体验店加 盟合作|V R设备在线购买

VR&#xff08;虚拟现实&#xff09;技术作为一种新兴的技术&#xff0c;正在逐渐改变人们的生活和工作方式。随着技术的不断进步&#xff0c;人们对于元宇宙的概念也越来越感兴趣。元宇宙是一个虚拟世界&#xff0c;通过VR技术可以实现人们在其中进行各种活动和交互。 元宇宙的…...

大话设计模式之策略模式

策略模式是一种行为设计模式&#xff0c;它允许在运行时选择算法的行为。这种模式定义了一族算法&#xff0c;将每个算法都封装起来&#xff0c;并且使它们之间可以互相替换。 在策略模式中&#xff0c;一个类的行为或其算法可以在运行时改变。这种模式包含以下角色&#xff1…...

蓝桥杯23年第十四届省赛真题-三国游戏|贪心,sort函数排序

题目链接&#xff1a; 1.三国游戏 - 蓝桥云课 (lanqiao.cn) 蓝桥杯2023年第十四届省赛真题-三国游戏 - C语言网 (dotcpp.com) 虽然这道题不难&#xff0c;很容易想到&#xff0c;但是这个视频的思路理得很清楚&#xff1a; [蓝桥杯]真题讲解&#xff1a;三国游戏&#xff0…...

P15:PATH环境变量

为什么要配置环境变量 当我们打开DOS窗口&#xff0c;输入&#xff1a;javac&#xff0c;出现下面问题。 原因&#xff1a;windows操作系统在当前目录中无法找到javac命令文件。Windows操作系统是如何搜索硬盘上某一个命令&#xff1f; 首先从当前目录中搜索该命令如果当前目录…...

math模块篇(七)

文章目录 math.dist(p, q)math.hypot(*coordinates)math.sin(x)math.tan(x)math.degrees(x)math.radians(x)math.acosh(x)math.asinh(x)math.atanh(x) math.dist(p, q) 在Python的math模块中&#xff0c;并没有一个名为math.dist(p, q)的函数。可能你是想要计算两点p和q之间的…...

wordpress插件,免费的wordpress插件

WordPress作为世界上最受欢迎的内容管理系统之一&#xff0c;拥有庞大的插件生态系统&#xff0c;为用户提供了丰富的功能扩展。在内容创作和SEO优化方面&#xff0c;有一类特殊的插件是自动生成原创文章并自动发布到WordPress站点的工具。这些插件能够帮助用户节省时间和精力&…...

Remote Desktop Manager for Mac:远程桌面管理软件

Remote Desktop Manager for Mac&#xff0c;是远程桌面管理的理想之选。它集成了多种远程连接技术&#xff0c;无论是SSH、RDP还是VNC&#xff0c;都能轻松应对&#xff0c;让您随时随地安全访问远程服务器和工作站。 软件下载&#xff1a;Remote Desktop Manager for Mac下载…...

如何撰写研究论文

SEVENTYFOUR/SHUTTERSTOCK 即使对于有经验的作家来说&#xff0c;将数月或数年的研究浓缩到几页纸中也是一项艰巨的任务。作者需要在令人信服地解决他们的科学问题和详细地呈现他们的结果之间找到最佳平衡点&#xff0c;以至于丢失了关键信息。他们必须简明扼要地描述他们的方…...

核聚变装置逼近极限时会“漏水“:科学家发现热流平衡决定密度天花板

来源&#xff1a;科学剃刀人类距离可控核聚变又近了一步&#xff0c;但一道隐形天花板始终悬在头顶。当反应堆试图提高燃料密度以获得更多能量时&#xff0c;等离子体总会在某个临界点突然崩溃。这种"密度极限"现象困扰了聚变界四十年。现在&#xff0c;美国麻省理工…...

零基础养龙虾:OpenClaw部署从入门到上手,一篇讲透!

2026年&#xff0c;OpenClaw&#xff08;昵称 “龙虾”&#xff09;凭借 “能真正动手干活” 的核心能力&#xff0c;成为开源AI Agent领域的顶流。它不仅能像ChatGPT一样聊天&#xff0c;更能自主操作电脑——整理文件、控制浏览器、发送邮件、甚至调用硬件设备。因其图标酷似…...

BiliTools:跨平台资源管理与高效解析的哔哩哔哩工具箱

BiliTools&#xff1a;跨平台资源管理与高效解析的哔哩哔哩工具箱 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Trending/bilit/Bili…...

比较好的金线包封胶制造商推荐几家

嘿&#xff0c;朋友们&#xff01;在半导体封装领域&#xff0c;金线包封胶就像是芯片的“贴身保镖”&#xff0c;保护着纤细的金线&#xff0c;让芯片能够稳定工作。今天咱们就来聊聊比较好的金线包封胶制造商&#xff0c;看看哪家更值得你选择。一、东莞市汉思新材料科技有限…...

CodeSys WebVisu避坑指南:用three.js给机械臂做3D可视化,我踩过的8个坑

CodeSys WebVisu与three.js深度整合实战&#xff1a;机械臂3D可视化开发避坑手册 在工业自动化领域&#xff0c;机械臂的实时状态可视化一直是HMI开发中的难点与痛点。传统解决方案往往受限于渲染效果和交互灵活性&#xff0c;而基于WebGL的three.js技术栈恰好能弥补这些不足。…...

嵌入式通信协议SPI/I2C/UART原理与应用

嵌入式通信协议原理图解与技术解析1. 串行通信协议基础1.1 SPI通信协议SPI(Serial Peripheral Interface)是一种全双工、同步串行通信协议&#xff0c;采用主从架构设计。其核心特点包括&#xff1a;四线制结构&#xff1a;SCLK(时钟)、MOSI(主出从入)、MISO(主入从出)、SS(片选…...

移动端ECharts实战:如何隐藏原生滚动条实现内容区域左右滑动(附完整代码)

移动端ECharts进阶&#xff1a;原生滚动条隐藏与手势滑动优化全解析 在移动端数据可视化项目中&#xff0c;ECharts的默认滚动条交互常常成为用户体验的"阿喀琉斯之踵"。当用户手指在狭小的滚动条上艰难拖动时&#xff0c;那种顿挫感和操作失败率会让精心设计的数据图…...

轻量级百度搜索结果获取解决方案:让数据获取不再复杂

轻量级百度搜索结果获取解决方案&#xff1a;让数据获取不再复杂 【免费下载链接】python-baidusearch 自己手写的百度搜索接口的封装&#xff0c;pip安装&#xff0c;支持命令行执行。Baidu Search unofficial API for Python with no external dependencies 项目地址: http…...

wan2.1-vae中英文双语支持实测:中文提示词准确率92%+英文prompt兼容性验证

wan2.1-vae中英文双语支持实测&#xff1a;中文提示词准确率92%英文prompt兼容性验证 1. 平台核心能力解析 wan2.1-vae是基于Qwen-Image-2512模型的AI图像生成平台&#xff0c;其最大特色在于原生支持中英文双语提示词。在实际测试中&#xff0c;中文提示词的理解准确率达到9…...

鸿蒙Next通讯录实战:用ArkUI 3.0手把手教你打造新建联系人页面(附完整代码)

鸿蒙Next通讯录实战&#xff1a;用ArkUI 3.0构建企业级新建联系人页面 在移动应用开发领域&#xff0c;通讯录功能一直是检验开发者UI构建和数据管理能力的经典场景。鸿蒙Next作为新一代分布式操作系统&#xff0c;其ArkUI 3.0框架为开发者提供了声明式UI编程范式&#xff0c;让…...