C++设计模式——简单工厂模式

立创EDA实战:基于NE555的夜间氛围呼吸灯电路设计与模式切换 本文详细介绍了使用立创EDA设计基于NE555芯片的夜间氛围呼吸灯电路。项目核心是利用NE555产生PWM信号,并通过RC充放电电路实现LED亮度的缓慢周期性变化,形成呼吸效果。文章手把手教学,涵盖从电路原理分析、元件参数计算,到在立创EDA中进行原理图绘制、PCB布局布线,直至焊接调试的完整硬件设计流程,是电子爱好者入门实战的经典项目。 阅读详情

问题描述

之前在公司做了一个windows 8平台的阅读器。首先,需要将电子书中的内容渲染到屏幕上,而电子书每一页都包含各种各样的内容,比如:图形、图像和文字等等;不同的内容,就是不同的对象;在将不同的内容渲染到屏幕上之前,就需要new操作,建立不同的对象,然后再在屏幕上进行描绘。这个时候,就需要进行很多new操作,new操作分布在代码的不同地方,管理起来很麻烦,而且也很乱,到后期扩展和维护的时候,有的时候,对象多的让开发人员不知道这个对象是干什么的,这就增加了难度;同时,new操作,都会有对应的异常处理,最后,就会发现,在代码中,new了一个对象,然后,就跟着一段异常处理代码,这时编码变的极其混乱和臃肿。那么怎么办?怎么办?此时,我们需要一个新的类,专门从事对象的建立和释放,之后,对象的各种操作,和这个类没有任何关系。这个专门建立对象的类,向外暴漏创建对象的接口,供外部调用。

工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品;在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的。从软件开发的角度来说,这样就有效的降低了模块之间的耦合。

 

UML类图

对于工厂模式,具体上可以分为三类:

  1. 简单工厂模式;
  2. 工厂方法模式;
  3. 抽象工厂模式。

对于上面的三种工厂模式,从上到下逐步抽象,并且更具一般性。而这篇博文主要讲的是简单工厂模式,后两种会在之后的博文中接着总结。

ProductA、ProductB和ProductC继承自Product虚拟类,Show方法是不同产品的自描述;Factory依赖于ProductA、ProductB和ProductC,Factory根据不同的条件创建不同的Product对象。

 

适用场合

  1. 在程序中,需要创建的对象很多,导致对象的new操作多且杂时,需要使用简单工厂模式;
  2. 由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方便后期的程序扩展和维护。

 

代码实现

#include <iostream>
#include <vector>
using namespace std;

typedef enum ProductTypeTag
{
    TypeA,
    TypeB,
    TypeC
}PRODUCTTYPE;

// Here is the product class
class Product
{
public:
    virtual void Show() = 0;
};

class ProductA : public Product
{
public:
    void Show()
    {
        cout<<"I'm ProductA"<<endl;
    }
};

class ProductB : public Product
{
public:
    void Show()
    {
        cout<<"I'm ProductB"<<endl;
    }
};

class ProductC : public Product
{
public:
    void Show()
    {
        cout<<"I'm ProductC"<<endl;
    }
};

// Here is the Factory class
class Factory
{
public:
    Product* CreateProduct(PRODUCTTYPE type)
    {
        switch (type)
        {
        case TypeA:
            return new ProductA();

        case TypeB:
            return new ProductB();

        case TypeC:
            return new ProductC();

        default:
            return NULL;
        }
    }
};

int main(int argc, char *argv[])
{
    // First, create a factory object
    Factory *ProductFactory = new Factory();
    Product *productObjA = ProductFactory->CreateProduct(TypeA);
    if (productObjA != NULL)
        productObjA->Show();

    Product *productObjB = ProductFactory->CreateProduct(TypeB);
    if (productObjB != NULL)
        productObjB->Show();

    Product *productObjC = ProductFactory->CreateProduct(TypeC);
    if (productObjC != NULL)
        productObjC->Show();

    delete ProductFactory;
    ProductFactory = NULL;

    delete productObjA;
    productObjA = NULL;

    delete productObjB;
    productObjB = NULL;        

    delete productObjC;
    productObjC = NULL;

    return 0;
}

 

deepfacelab下载安装及训练(小白篇),以及导出SAEHD为dfm文件,解决broken pipe问题 其中如果用的是RTX30系列显卡的话,需要把WIN10升级到20H4或更新版本,然后打开硬件加速,不然会出现训练时一直卡在第一个迭代不动了,我的服务器版本为22H2,符合。支持WIN10,win11,WIN7,LINUX,不支持mac(因为mac不支持NVIDIA显卡) 阅读详情

相关推荐

Frida实战:SSL Pinning绕过技术全解析

本文详细解析了如何使用Frida工具绕过SSL Pinning技术,包括环境搭建、四种实战绕过方案及常见问题排查指南。通过具体代码示例和实战经验,帮助安全研究人员快速掌握SSL Pinning绕过技术,适用于金融类App的安全测试场景。

weixin_42530732的博客 187

工厂设计模式

1、概念 工厂模式分三种:简单工厂模式、工厂方法模式、抽象工厂模式 简单工厂模式(Simple Factory Pattern):属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式严重违背了“开闭原则”,难以拓展。 工厂方法模式(Factory Method):定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为

elapse008的专栏 5813

基于STM32的多模态智能风扇控制系统设计与实现

本文详细介绍了基于STM32单片机的多模态智能风扇控制系统的设计与实现。系统集成了红外遥控、蓝牙手机控制及人体感应等多模态交互方式,通过PWM技术实现无级调速,并设计了安全优先的控制逻辑。文章从硬件选型、核心原理、软件编程到系统调试,提供了完整的实战指南,适合嵌入式开发爱好者学习与实践。

weixin_28285943的博客 238

设计模式之工厂模式,史上最强,不服来辩!

设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结,如果设计模式没学会,抽象能力肯定就不会太强。常见的设计模式有 23 种,今天我们只聊最简单的工厂模式。工厂模式是属于创建型模式的...

xmt1139057136的专栏 5222

【已解决】Claude应用地区限制问题:通过Slack注册与魔法节点切换实战指南

本文详细介绍了如何通过Slack注册和切换魔法节点解决Claude应用地区限制问题。从Slack账号注册、创建工作区技巧,到突破地区限制的关键步骤和成功后的配置使用,提供了全面的实战指南。特别强调了节点选择和网络环境对解决'App unavailable'错误的重要性,帮助用户顺利使用Claude AI助手。

weixin_29209801的博客 1747

深入了解 CPU 的型号、代际架构与微架构!

深入了解 CPU 的型号、代际架构与微架构!

欢迎朋友,我是一名十多年开发经验的新手,希望多多指教。 3195

工厂设计模式:深入解析与应用

工厂设计模式是一种创建型设计模式,它提供了一种创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类。简单工厂模式不属于23种GOF设计模式之一,但它是最简单的工厂模式,常用于创建单一产品。简单工厂模式通过一个工厂类来创建不同类型的对象,客户端无需知道具体的创建细节。工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类。抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

xycxycooo的博客 1808

pytorch-cifar100学习资料汇总 - 基于PyTorch的CIFAR-100图像分类实践

pytorch-cifar100是一个基于PyTorch实现CIFAR-100数据集图像分类的开源项目。该项目实现了多种经典的深度学习网络模型,如ResNet、DenseNet、VGG等,为开发者提供了在CIFAR-100数据集上进行图像分类实验的代码范例。pytorch-cifar100项目为我们提供了在CIFAR-100数据集上进行图像分类实验的完整代码实现。无论你是想要学习PyTorch的使用,还是研究不同网络模型在CIFAR-100上的表现,这个项目都是一个很好的起点。

helloaiworld的博客 1121

【设计模式】工厂模式(Factory Pattern)

工厂模式

qq_27198345的博客 1万+

麒麟银河操作系统V10下ffmpeg的完整部署指南(兼容Linux系统)

本文提供在麒麟银河操作系统V10上从源码编译部署FFmpeg的完整指南,涵盖环境准备、核心依赖库(如x264)编译、FFmpeg本体配置安装、系统集成及常见问题排查。步骤详细,同样适用于Ubuntu、CentOS等主流Linux发行版,帮助用户打造功能强大的多媒体处理工具链。

weixin_29205061的博客 255

STM32 伺服电机 指令脉冲+方向位置控制模式 主从定时器 实现PWM脉冲数精确控制

实验室有个项目涉及到多个步进电机以及伺服电机的控制,需要电机得到一个触发信号后精确移动一段距离。 下面以单个伺服电机控制为例,利用伺服电机的指令脉冲加方向位置控制模式实现jing'que ...

phcdd的博客 2万+

设计模式 - 工厂模式、建造者模式,就该这样学!

简单工厂不是一种设计模式,反而比较像是一种编程习惯.抽象产品 :定义了产品的规范,描述了产品的主要特性和功能。具体产品 :实现或者继承抽象产品的子类具体工厂 :提供了创建产品的方法,调用者通过该方法来获取产品。

CYK_byte的博客 3809

Unity 如何使用命令模式

命令模式 游戏中,当你想通过一种通用的方式来存储命令并能够撤消命令时,那么命令模式最有用。 在“示例”中,你将看到一个可以通过GUI按钮移动的简单点。 采取行动后,您可以撤消并重做。我在屏幕上添加了一个简单的OnGUI标签输出,因此您可以看到命令列表,并指出哪个是当前命令。 在此示例中使用了4个类: Command-这是任何命令模式都可以继承的基本结构(抽象类)。您可以在任何项目中使用此类。 MoveCommand-这是从Command类继承的结构,将使用Execute和UnExecute(撤消)。每个移

TxNet 1553

【c++设计模式03】创建型1:简单工厂模式(Simple Factory Pattern)

并由实现该接口或继承该抽象类的具体工厂类负责实例化对象。在工厂模式中,客户端通过调用工厂类的方法来获取所需的对象,而无需直接实例化对象。工厂类根据不同的需求条件,使用不同的逻辑或算法创建相应的对象,隐藏了对象创建的具体细节。工厂模式可以有效地降低系统的耦合度,提高代码的可维护性和可扩展性。它符合面向对象设计原则中的开放封闭原则,即对扩展开放,对修改封闭。当需要新增一种产品时,只需添加相应的具体产品类和对应的工厂类,而无需修改已有的代码。常见的工厂模式包括。

junxuezheng的博客 1115

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【C++设计模式】简单工厂模式

从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 具体概念可以参照百度百科:http://baike.baidu.com/view/122790

EnCaL 788

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

c++设计模式:简单工厂模式(Simple Factory Pattern)

定义: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 场景: 我们要开一家比萨商店,定义了一个简单的披萨工厂,可以根据客户的需

编程小生的专栏 688

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

大话设计模式c++实现1——简单工厂模式 Simple Factory Pattern

问题:实现一个计算器控制台程序。 编程初学者会直觉地用计算机能够理解的逻辑来描述和表达解决问题的具体求解过程,这其实是用计算机的方式去思考。比如计算器程序,小要求输入两个数和运算符号,然后根据运算符号判断选择如何运算,得到结果。想法本身没问题,但这样的程序不易于维护,不容易扩展,更不容易复用。 面向对象的好处就如同活字印刷和雕版印刷的区别一样:1.可维护,2.可复用, 3.可扩展, 4.灵活性

JarvisKao的博客 696

大话设计模式C++版(简单工厂模式)

  刚开始学设计模式,我选择的是大家都喜欢的大话设计模式,但是个人偏好C++,所以想要模仿C#版来做自己的C++版,这是第一个设计模式,简单工厂模式,虽然是很简单的模式,但是对于C++不是吃得很透的我来说问题还是挺大的,由于+,-,*,/都是继承自同一个父类,所以出现了父类重定义的问题,困扰我很久。后来发现必须要加入#ifndef XXXX #define XXXX最后加上#end来解...

a583911125的博客 184

C++ 设计模式——简单工厂模式

简单工厂模式是一种创建型设计模式,通过一个工厂类来负责对象的实例。这种模式将对象创建的细节封装在工厂类中,客户端无需知道具体的创建过程,只需通过工厂类获取对象实例即可。

慢慢记录,慢慢更新。 1091

c++设计模式--简单工厂模式

简单工厂模式

u013083044的博客 979

C++设计模式之简单工厂模式

C++ 设计模式之简单工厂模式C 设计模式之简单工厂模式 一使用情景 二实现 三代码分析 五总结一、使用情景在许多情况下,我们需要创建一系列的类的实例,并且这些实例的创建过程都十分繁琐,这时候我们可以将这些类的创建过程都封装到一个工厂类中,由工厂类进行创建,从而屏蔽了创建的细节。 简单工厂的定义如下: 定义一个工厂类,它可以根据参数的不同返回不同类型的实例,被创建的实例通常都具有相同的父类。因

李兰溪的专栏 770

设计模式之简单工厂模式(C++实现)

简单工厂模式介绍,包括应用场景,优缺点,模式结构,类图 以及 C++代码示例

墨1024 1389

C++ 设计模式之简单工厂模式

设计模式之简单工厂模式

L_qingting的博客 402

设计模式系列(四)简单工厂模式(Simple Factory Pattern/Static Factory Method)

设计模式系列(四)简单工厂模式 (Simple Factory Pattern/Static Factory Method)     简单工厂模式又被成为静态工厂方法,所以其外文名一般是Static Factory Method。其属于创建型模式,本质上并不属于23种GOF设计模式之一,这种模式可以称之为一种编程习惯,算是一种比较良好的设计习惯。那么什么是简单工厂设计模式呢?从概念上来

君临天下的博客 1086

C++设计模式:简单工厂模式与工厂模式

**简单工厂模式**:适合产品种类较少的情况,但不符合开闭原则,扩展性较差。- **工厂模式**:符合开闭原则和依赖倒置原则,更适合需要扩展产品类型的场景。通过对比两种工厂模式,我们可以看到,**工厂模式**是一个更加灵活和可扩展的设计,符合设计模式的基本原则。

该博主有点懒,什么也没写 583

我所理解的设计模式(C++实现)——简单工厂模式(Simple Factory Pattern)

简单工厂模式按照设计模式类型分的话是属于创建型模式,他是工厂模式中最简单的一种,他不属于GoF 23中设计模式之一,但是是简单实用的。他是有一个工厂对象来决定创建哪一种对象的实例。 实现比较简单,这里我只贴出类图和调用方法:    调用方法: IProduct * simpleFactory::Create(std::string className) { if( className

十八道胡同的博客专栏 3953
上一篇: 编辑控件(edit)的事件
下一篇: C++设计模式——工厂方法模式
CoderAldrich
博客等级 码龄12年 431粉丝 24原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值