【C/C++】设计模式——工厂模式:简单工厂、工厂方法、抽象工厂

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


目录

  • 一、工厂模式的特点
  • 二、简单工厂模式(静态工厂)
  • 三、工厂方法
  • 四、抽象工厂

一、工厂模式的特点

工厂模式提供了一种封装对象创建过程的方式,使得代码更易于管理和扩展。

工厂模式隐藏了对象的具体创建过程,从而可以通过接口来创建对象,而无需关心具体的实现细节

扩展性高:工厂模式利于后期方法的维护,解耦合。

二、简单工厂模式(静态工厂)

将对象的创建和使用分离,由一个工厂类根据传入的参数来决定创建哪一种产品类的实例

image.png

#include <iostream>
using namespace std;class Product 
{//抽象类
public:virtual void use() = 0; // 纯虚函数,定义产品接口  
};class ProductA : public Product {
public:void use() override {cout << "ProductA::use()" << endl;}
};class ProductB : public Product {
public:void use() override {cout << "ProductB::use()" << endl;}
};class SimpleFactory 
{//简单工厂
public:static Product* createProduct(const string& type) {//根据传入的参数来决定创建哪一种产品类的实例if (type == "A") {cout << "create ProductA" << endl;return new ProductA();}else if (type == "B") {cout << "create ProductB" << endl;return new ProductB();}return nullptr;}
};int main()
{//根据产品类型创建产品Product* product = SimpleFactory::createProduct("B");//使用对应类型的产品if (product){product->use();delete product; }return 0;
};

image.png

三、工厂方法

简单工厂违背了开闭原则,故将简单工厂中的工厂拆分为多个工厂:

增加产品时 Factory 工厂不用改变,只需要添加对应产品类型的工厂

image.png

#include <iostream>
using namespace std;class Product {
public:virtual void use() = 0;
};class ProductA : public Product {
public:void use() override { cout << "ProductA::use()" << endl; }
};class ProductB : public Product {
public:void use() override { cout << "ProductB::use()" << endl; }
};//工厂方法
class Creator 
{//抽象类 工厂方法
public:virtual Product* createProduct() = 0; 
};class CreatorA : public Creator 
{//ProductA工厂
public:Product* createProduct() override {cout << "CreatorA createProduct ProductA" << endl;return new ProductA();}
};class CreatorB : public Creator 
{//ProductB工厂
public:Product* createProduct() override {cout << "CreatorB createProduct ProductB" << endl;return new ProductB();}
};int main()
{//创建工厂:生产A产品类型的工厂Creator* creator = new CreatorA();//使用该工厂创建产品Product* product = creator->createProduct();//使用产品product->use();delete product; // 释放产品  delete creator; // 释放工厂return 0;
};

image.png

四、抽象工厂

抽象工厂与工厂方法类似,工厂不止用来生产一种产品,可以用于创建与产品相关的一系列产品

适用于大批量、一系列的对象的生产。


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

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

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

相关文章

二.基础篇: 面向对象进阶

1. 基础篇语法篇&#xff1a;一.基础篇&#xff1a;基础语法-CSDN博客 面向对象进阶 本章主要学习内容&#xff1a; static继承包&#xff0c;final&#xff0c;权限修饰符&#xff0c;代码块抽象类接口多态内部类 1. static static翻译过来就是静态的意思static表示静态&am…

AI语音模型PaddleSpeech踩坑(安装)指南

PaddleSpeech简介 PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库&#xff0c;用于语音和音频中的各种关键任务的开发&#xff0c;包含大量基于深度学习前沿和有影响力的模型。 PaddleSpeech安装步骤 提示&#xff1a;要找到一个合适的PaddleSpeech版本与pad…

STM32开发学习——使用 Cortex-M3M4M7 故障异常原因与定位

STM32开发学习——使用 Cortex-M3/M4/M7 故障异常原因与定位 文章目录 STM32开发学习——使用 Cortex-M3/M4/M7 故障异常原因与定位文档说明&#xff1a;官方参考文档线上链接&#xff08;可在线阅读与下载&#xff09;&#xff1a;故障异常处理程序HardFault优先级升级说明故障…

java项目之相亲网站的设计与实现源码(springboot+mysql+vue)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的相亲网站的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 相亲网站的设计与实…

连升三级!openGauss单机版从2.1.0经停3.0.0升级至5.0.0

前言 如前文所述&#xff0c;我们的小demo项目起初安装了openGauss的2.1.0版本&#xff0c;由于2.1.0不是长期维护&#xff08;LTS&#xff09;版本&#xff0c;所以要升级到5.0.0LTS。考虑到虽然是DEMO项目&#xff0c;但也有些体验用户&#xff0c;所以为了保障业务连续性&a…

2023版brupsuite专业破解安装

安装教程&#xff0c;分两部分&#xff1a; 1、安装java环境、参考链接JAVA安装配置----最详细的教程&#xff08;测试木头人&#xff09;_java安装教程详细-CSDN博客 2、安装2023.4版本brupsuite&#xff1a;参考链接 2023最新版—Brup_Suite安装配置----最详细的教程&…

Java---类和对象第一节

目录 1.面向对象初步认识 1.1什么是面向对象 1.2面向对象和面向过程的区别 2.类的定义和使用 2.1简单认识类 2.2类的定义格式 2.3类的实例化 2.4类和对象的说明 3.this关键字 3.1访问本类成员变量 3.2调用构造方法初始化成员变量 3.3this引用的特性 4.对象的构造以…

一文弄懂 Linux 系统调用函数之 exec 函数族

目录 简介函数原型参数说明返回值函数区别使用示例采用参数列表传递参数&#xff0c;以 execl 为例采用参数数组传递参数&#xff0c;以 execv 为例调用 PATH 下可执行文件&#xff0c;以 execlp 为例使用新的环境变量给新进程&#xff0c;以 execle 为例 更多内容 简介 exec …

【Java】/*方法的使用-快速总结*/

目录 一、什么是方法 二、方法的定义 三、实参和形参的关系 四、方法重载 五、方法签名 一、什么是方法 Java中的方法可以理解为C语言中的函数&#xff0c;只是换了个名称而已。 二、方法的定义 1. 语法格式&#xff1a; public static 返回类型 方法名 (形参列表) { //方…

windows server 2019 安装 docker环境

一、根据官方说明进行安装 , 看起来过程相当简单, 但问题还是有的 准备 Windows 操作系统容器 | Microsoft Learn // 一个 powershell 脚本&#xff0c;该脚本配置环境以启用与容器相关的 OS 功能并安装 Docker 运行时。 Invoke-WebRequest -UseBasicParsing "https://r…

【Docker】Ubuntu下Docker的基本使用方法与常用命令总结

【Docker】docker的基本使用方法 镜像image与容器container的关系基本命令- 查看 Docker 版本- 拉取镜像- 查看系统中的镜像- 删除某个镜像- 列出当前 Docker 主机上的所有容器&#xff0c;包括正在运行的、暂停的、已停止的&#xff0c;以及未运行的容器- 列出当前 Docker 主机…

【信息系统项目管理师知识点速记】沟通管理:管理沟通

管理沟通是确保项目信息流通顺畅的关键流程,涉及到信息的收集、生成、传播、存档、检索、监管及最终处理,以促进项目团队与利益相关者的有效互动。这一过程不仅关乎信息的发布,更侧重于信息的恰当格式与精准送达,同时鼓励利益相关者的积极参与,包括信息补充、澄清和讨论。…

《二十一》QT QML编程基础

QML概述 QML&#xff08;Qt Meta-Object Language&#xff09;是一种声明性语言&#xff0c;它被用于描述Qt框架中用户界面的结构和行为。QML提供了一种简洁、灵活的方式来创建动态和交互式的界面。 QML基于JavaScript语法&#xff0c;通过使用QML类型和属性来定义界面的元素…

基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三)

基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 大家继续看 https://lilianweng.github.io/posts/2023-06-23-agent/的文档内容 第二部分&#xff1a;内存 记忆的类型 记忆可以定义为用于获取、存储、保留以及随后检索信息的过程。人脑中有多…

Mac 使用:Micosoft Remote Desktop 远程优化

Micosoft Remote Desktop远程优化 服务器 远程会话环境设置 WinR打开运行&#xff0c;输入gpedit.msc 找到计算机配置->管理模板->Windows组件->远程桌面服务->远程桌面会话主机->远程会话环境。下面这几个打开&#xff0c;有效提高rdp性能。 rdp协议同时使用…

自动驾驶---Behavior Planning之EUDM

1 背景 在前面的博客中,为读者朋友们阐述了自动驾驶Planning模块基于MCTS行为规划的文章《自动驾驶---Behavior Planning之MCTS》,博客中引用的论文的主要思想是以蒙特卡洛树来实现行为规划。今天,我们继续探寻另一种行为规划的策略,主角依然是香港科技大学。 熟悉的读者大…

vim 文件内容替换 cat 合并文件

vim 文件内容替换 第一步&#xff1a;首先要进入末行模式&#xff08;在命令模式下输入冒号:&#xff09; 第二步&#xff1a;根据需求替换内容 ① 只替换光标所在这一行的第一个满足条件的结果&#xff08;只能替换1次&#xff09; :s/要替换的关键词/替换后的关键词 回…

计数排序,基数排序,桶排序

目录 计数排序: 基数排序&#xff1a; 桶排序: 计数排序: 计数排序是一种非比较型整数排序算法&#xff0c;特别适用于一定范围内的整数排序。它的核心思想是使用一个额外的数组&#xff08;称为计数数组&#xff09;来计算每个值的出现次数&#xff0c;然后根据这些计数信…

C语言中错误处理的基本实现

引入头文件依赖&#xff1a; 标准输入输出流&#xff1a;#include <stdio.h>获取错误信息&#xff1a;#include <string.h>&#xff0c;strerror通过这个头文件获取文件流&#xff1a;#include <stdlib.h>&#xff0c;fprintf通过这个头文件获取错误编号&…

hadoop生态圈集群搭建(持续更新240512)

Hadoop生态圈 Linux1.修改ip地址2.重启network服务3.安装插件4.关闭防火墙5.创建用户6.创建目录7.修改目录的所属主和所属组为lxy8.修改主机名:hadoop102 (注意名字后面不要加空格)9.修改hosts文件10.等插件都装完后再重启Linux11.把xshell的登录用户换成lxy &#xff08;注意&…