23种设计模式C++源码与UML实现--简单工厂模式

设计模式那么多!面试官会怎么问? Jungle花了几个月的时间整理出了《C++设计模式系列》,将源码放到了Github上,并且自从这一系列博客发布至今,陆续在修复bug、完善代码和说明文档。当然,文章还存在很多不足,Jungle也将持续完善。C++设计模式系列文章汇总_冯Jungle的个人博客-优快云博客Jungle整理的C++设计模式系列文章出炉了,每一种设计模式都包含:理论知识:每一种模式的定义、解释模式UML结构和角色分析:UML类图说明模式的角色和结构模式应用实例:将设计模式应用于具体的例子,并给出UML实例类图完整的源代码... 阅读详情
简单工程模式

简单工厂模式,属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

模式中包含的角色及其职责

工厂角色

简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂可以被外界直接调用,创建所需的产品对象。

抽象角色

简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品角色

简单工厂模式所创建的具体实例对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nYDIc0dH-1602166807787)(picture/ClassDiagram1.png)]

说明:产品和工厂之间的关系是依赖,产品和抽象产品之间的关系是继承。

依赖:一个类的对象当另外一个类的函数参数或者返回值

简单工厂模式的优缺点

在简单工厂模式中,工厂类是整个魔偶是的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用的时候,可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。不难发现,简单工厂模式的有点也体现在工厂类上,由于工厂类集中了所有实例创建的逻辑,所以高内聚方面做的不好,另外,当系统中的具体产品类不断增多时,可能出现要求工厂也要做响应的修改,扩展性不好。

简单工厂模式的实现

#include <iostream>
#include <string>

using namespace std;

//  抽象类中定义子类中需要实现的功能,也就是限定了子类必须实现的一些函数
class Fruit
{
public:
    virtual void GetFruit(void) = 0;
    virtual ~Fruit(void)
    {

    }
};

class Banana : public Fruit
{
public:
    virtual void GetFruit(void)
    {
        cout << "I'm banana." << endl;
    }
};


class Apple : public Fruit
{
public:
    virtual void GetFruit(void)
    {
        cout << "I'm apple." << endl;
    }
};

class Factory
{
public:
    Fruit *CreateFruit(string &pStr)
    {
        if(0 == pStr.compare("banana"))
        {
            return new Banana;
        }
        else if(0 == pStr.compare("apple"))
        {
            return new Apple;
        }
        else
        {
           cout << "Factory not support" << endl;
        }
        return NULL;
    }
};


int main(int argc, char const *argv[])
{
    Factory *f = new Factory;

    Fruit *fruit = NULL;
    string bananaStr("banana");
    string appleStr("apple"); 


    // 工厂声场香蕉
    fruit = f->CreateFruit(bananaStr);
    if(NULL != fruit)
    {
        fruit->GetFruit();
        delete fruit;
    }
    // 工厂生产苹果
    fruit = f->CreateFruit(appleStr);
    if(NULL != fruit)
    {
        fruit->GetFruit();
        delete fruit;
    }

    delete f;
    cout << "simple factory test" << endl;
    return 0;
}

执行结果:

I'm banana.
I'm apple.
simple factory test

通过结果可以看出,工厂通过传入的字符串已经正确的生产出想要的产品。

怎么定位K8s容器中运行的JAVA程序OOM异常(一) 一.前置环境 1. 运行在k8s集群上的Pod服务(Java程序) 2. MAT分析工具 二.利用Jmap工具导出Heap Dump 1.执行命令进入pod容器 kubectl exec -itn {namespace} {pod}} sh 2.利用jmap生成java程序的Dump文件 jps | grep {jar} ./jmap -dump:live,format=b,file=haep.hprof 8 3.利用k8s命令导出Dump文件到本地 kubectl cp -n 阅读详情

相关推荐

ADS新手必看:5分钟搞定Smith圆图阻抗匹配(附详细操作截图)

本文为射频电路设计新手提供了在ADS软件中快速使用Smith圆图进行阻抗匹配的实战指南。通过清晰的步骤和操作截图,详细演示了如何从负载阻抗点出发,通过添加电感和电容元件,在5分钟内完成向50欧姆标准阻抗的匹配,并介绍了仿真验证与性能调优的方法,帮助工程师和学生直观掌握这一核心技能。

weixin_29261711的博客 392

设计模式之抽象工厂模式(代理方式实现)

抽象工厂模式跟工厂方法模式一样主要是为了解决接口问题,但实现上抽象工厂是一个中心工厂负责创建其他工厂的模式,接口负责创建一个相关对象的工厂,不需要显示指定具体的实现类,每个生成的工厂都能按照工厂模式提供对象。 代码实现 1、代码目录 工程部分核心代码功能如下: IFactoryAdapter:定义了适配器接口,用于屏蔽IFactoryOne、IFactoryTwo两个工厂接口的具体实现; FactoryProxy、FactoryInvocationHandler:代理类的定义和实现,抽象工厂的另外一种实

xxhhaoge的博客 519

这可是全网网工数通方向学习路线最完整,最详细的版本,没有之一

文章篇幅较长,耐心看完你一定有所收获。

最铁头的网工博客 2万+

设计模式实践一:桥接模式+代理模式+抽象工厂实现既有业务的模式分离

问题 现有某个类型的功能模块ActSubject,其包含某些固定流程的方法mainFunc1、mainFunc2、mainFunc3等,这些流程性方法自能在和其它同类型的功能模块的共同父类ActSubjectBase中的baseFunc中调用,并且伴随一些其它的行为调用。 abstract class ActSubjectBase { baseFunc(condition:number){ if(condition === 1){ ...此处有其它行为调用 this.mainFunc1()

qq_33811591的博客 538

Frida实战:高效dump Android内存中的so文件与修复技巧

本文详细介绍了使用Frida工具dump Android内存中已解密so文件的实战技巧。针对加固应用静态分析失效的痛点,文章提供了从环境搭建、使用frida_dump脚本自动化抓取内存数据,到利用SoFixer工具修复ELF文件结构的完整流程,帮助逆向分析人员高效获取可分析的so文件。

tt34567的博客 527

单细胞分析进阶:sctransform标准化在Seurat中的实战解析

本文深入解析了sctransform标准化方法在Seurat单细胞分析中的实战应用。通过对比传统对数标准化,sctransform能更有效地建模并剔除技术噪音,提升数据质量。文章提供了从环境配置、数据准备、核心参数解析到完整流程整合的详细指南,并针对常见问题给出解决方案,帮助研究者获得更清晰的细胞分群和更可靠的差异表达结果。

weixin_29248313的博客 150

简单工厂模式【创建型模型】

目录 1.特点 2.模型与结构 2.1.模型 2.2.结构图 3.代码实现 3.1.产品抽象 3.2.产品实现 3.3.产品的构建 4.应用场景 1.特点 在一个类中定义不同类型的不同实现,通过入参进行判断,生产出来的产品是什么。 2.模型与结构 2.1.模型 简单工厂模式的主要角色如下: 简单工厂(SimpleFactory):是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。 抽象产品(Product

风逸云舒 1148

Ubuntu22.04下,用Fast-LIVO2+3DGS重建桌面小物件:从点云到高清模型的保姆级避坑实录

本文详细介绍了在Ubuntu22.04环境下,使用Fast-LIVO2与3DGS技术进行桌面小物件三维重建的完整流程。从环境配置、数据采集到点云-图像对齐和3DGS训练,提供了针对小物件优化的参数设置和避坑指南,帮助用户实现媲美商业扫描仪的高清模型重建效果。

weixin_30897233的博客 398

简单工厂模式(设计模式)

简单工厂模式(Simple Factory Pattern) ​ 静态工厂模式属于类创建型模式; 模式结构: 1.抽象产品角色(Product) ​ 负责描述所有实例公有的接口; 2.工厂角色(Factory) ​ 负责实现创建所有实例的内部逻辑; 3.具体产品角色(concreteProduct) ​ 创建具体的目标; 实现: Product(抽象类) public abstract class Product { public abstract void use(); }

WangCode 554

WOFOST作物模型(1):PCSE环境配置

get_summary_output() 方法通常用于在 PCSE 模拟过程结束后,获取模拟结果的摘要信息,例如模拟期间的总产量、总水分需求等。它可以提供对模拟结果的快速总结,方便用户进行后续的分析和处理。用.get_output来获取过程参数,并将这些参数转为dataframe显示。用run_till_terminate()代表终止。安装好之后,打开jupyter notebook。也可以指定运行时间,并获取最后一天的参数。首先还是打开之前建好的gee虚拟环境。

所有专家都曾始于新手 681

流量PID控制(开度前馈量计算+辅助PID)

PLC通过伯努利方程近似计算水箱流量(FC)-优快云博客文章浏览阅读1.6k次。本文介绍了如何使用PLC通过伯努利方程近似计算水箱中的液体流量,主要涉及流量计算、模型验证、梯形图编程及STL代码实现。适合自动化领域的学习者参考。单容双容水箱建模(simulink仿真+PLC代码)_水箱系统的建模方法-优快云博客文章浏览阅读2k次。该博客介绍了如何使用伯努利方程建立单容和双容水箱模型,详细阐述了从理论建模到PLC编程的实现过程。

RXXW_Dor的博客 845

【C++基础】简单工程模式、工厂模式、抽象工程模式

工厂模式的一些整理

weixin_42809675的博客 567

【Java开发者必看】LangChain4j实战指南:使用AIService轻松集成聊天记忆Chat Memory到SpringBoot应用,通过封装多轮复杂对话,使聊天记忆的实现变得简单

聊天记忆是指在与用户的多轮对话过程中,能够记住之前的交互内容,从而提供更加连贯和个性化的回复。LangChain4j支持通过ChatMemoryProvider接口实现聊天记忆功能。

Spring Boot-Common On With You 448

设计模式(C++)终极详解

设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 设计模式从何而来 发现人们对舒适住宅和城市环境存在一些共同的认同规律。 ava、C#、C++等编程语言,Eclipse.

weixin_38606457的博客 1027

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

23种设计模式C++实现UML+源码汇总

设计模式-汇总 代码开源仓库地址 23种设计模式C++实现 C++中的开闭原则使用C++多态功能实现附源码 C++基于多态实现依赖颠倒原则附源码 C++ 的静态成员变量为什么一定要在类外定义 23种设计模式C++源码与UML实现–单例模式中的饿汉模式和懒汉模式 c++中的 单例模式(singleton)和双检测锁(Double-Checked Locking) 23种设计模式C++源码与UML实现–简单工厂模式 23种设计模式C++源码与UML实现–工厂模式 23种设计模式C++源码与UML实现–代理模式

andrewbytecoder 2087

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

23种设计模式C++源码与UML实现--工厂模式

工厂模式 工厂方法模式同样属于类的创建型模式,又被称为多态工厂模式。工厂方法的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。 核心工厂类不在负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处就是使得工厂方法模式可以使系统不再修改具体工厂角色的情况下引进新的产品。 模式中包含的角色极其职责 抽象工厂角色 工厂方法的核心,任何工厂类都必须实现这个接口 具体工厂角色 具体工厂是抽象工厂的一个实现,负责实例化产品对象。 抽象角色 工厂方法模

andrewbytecoder 795

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

23种设计模式汇总篇-兄弟,该学点设计模式了!(含C++源码)

总序 这篇文章是对整个设计模式汇总篇,绘制了各种设计模式的UML类图,补充之前分享的篇幅中没有UML类图,方便学习和查看,文中的大部分文字叙述,在开篇写设计模式系列已经有存在。文章最后提供了设计模式的源码下载地址,有需要的可以直接下载使用,源码在windows下使用VS2017编译通过,可以使用VS系列直接创建工程编译,采用纯C++编写,也可以移植到linux平台编译。 一、设计模式简述 设计模式...

ISmileLi的博客 697

c++ 设计模式汇总

设计模式-汇总 代码开源仓库地址 23种设计模式C++实现 C++中的开闭原则使用C++多态功能实现附源码 C++基于多态实现依赖颠倒原则附源码 C++ 的静态成员变量为什么一定要在类外定义 23种设计模式C++源码与UML实现–单例模式中的饿汉模式和懒汉模式 c++中的 单例模式(singleton)和双检测锁(Double-Checked Locking) 23种设计模式C++源码与UML实现–简单工厂模式 23种设计模式C++源码与UML实现–工厂模式 23种设计模式C++源码与UML实现–代理模式

VCMamba的博客 350

设计模式终极指南:23种经典模式图解与实战PDF版

设计模式是软件开发中的黄金法则,能帮助开发者构建可维护、可扩展的软件系统。这本《图说设计模式》电子书通过图文结合的方式,为初学者和中级开发者提供完整的设计模式学习指南。本书涵盖了23种经典设计模式,包括创建型模式、结构型模式和行为型模式,每个模式都配有清晰的UML类图、时序图和实战代码示例。 ## 📚 为什么需要学习设计模式? 设计模式是软件开发的通用解决方案,能够帮助你: - **提高代

gitblog_00173的博客 522

linux系列文章

linux文章汇总 VIM bash Makefile uboot u-boot编译过程分析 linux Linux系统编程 Linux/UNIX网络编程

andrewbytecoder 1154

【设计模式】概述、重要性、原则、目的、意义

之前学得不踏实,重新复习一遍,打扎实基础中。 记录 图解Java设计模式-尚硅谷_韩顺平 & 【23种设计模式】概述-狂神说Java秦疆 文章目录设计模式的重要性设计模式的目的设计模式七大原则掌握设计模式的层次什么是设计模式?学习设计模式的意义设计模式的基本要素GoF 23参考资料 设计模式 GoF 23 23种设计模式 设计模式的重要性 [外链图片转存失败,源站可能有防盗链机制,建...

渐若窥宏大的博客 1344

这门编程语言开发了《黑神话:悟空》,看明白这本书才算真的会用

Part.1开发了《黑神话:悟空》的编程语言《黑神话:悟空》全平台销量已经超过 1000 万套!这款国产 3A 大制作游戏火遍全球,点燃了每位游戏爱好者的激情。程序员们也都在问:《黑神话:悟空》是用什么语言开发的?答案是C++,该游戏基于虚幻引擎(Unreal Engine),其底层源码主要使用的是 C++ 。想必怀揣梦想的程序员都希望精通 C++,进入大厂与顶尖人才并肩作战,也参与到 3A 游...

3D视觉工坊 675

设计模式:创建型模式:工厂模式(factory pattern)

本文基于整理综合下面两文,深表感谢: 1)设计模式精解-GoF 23 种设计模式解析附 C++实现源码 http://ccftp.scu.edu.cn:8090/Download/038c70a8-c724-4b86-91c3-74b927b1d492.pdf 2)设计模式C++实现(1)---工厂模式 http://blog.youkuaiyun.com/wuzhekai1985/article/det

世界是兔子的 773

震惊!小猪的设计模式初涉总结!纯干货~

震惊!小猪的设计模式初涉总结!纯干货~标签: 知识点总结描述性文字      今年一月初有了离职的念头后,就盘算着把设计模式给过一遍,索性就 开了一个新的系列:《如何让孩子爱上设计模式》,在编写过程中经历了 旧项目重构,离职交接,写简历,投简历,面试,搬家等阶段,零零星星, 总算是坚持写完,自己也是收获颇多,至少面试的时候别人问你用过了解 什么设计模式,不是绞尽脑汁的憋出那么几个烂大街的,单

Coder-Pig的猪栏 33万+

《Java之面向对象:中》

面向对象基础(中)

TheMyth142857的博客 1356
上一篇: c++中的 单例模式(singleton)和双检测锁(Double-Checked Locking)
下一篇: 23种设计模式C++源码与UML实现--工厂模式
andrewbytecoder
andrewbytecoder 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄10年 3476粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

andrewbytecoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值