九、简单工厂模式

C++创建型模式-工厂模式 一、基础知识 1.1 简单工厂模式 简单工厂模式(Simple Factory Pattern)专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。 1.2 简单工厂模式的角色 二、C++实现工厂模式 参考文献: 【1】 ...... 阅读详情

简单工厂模式

简单工厂模式,是一种实例化对象的方式,根据自身实际情况来实例化自己需要的对象,可以通过工厂类来实例化自己需要的类。工厂类是创造类,负责创建实例,父类的方法为虚函数,子类继承父类方法,重新实现。根据C++多态的特性实例化一个对象,在对象进行调用函数时,会动态的绑定调用子类重新实现的函数。

简单工厂模式采用虚继承的方式体现了C++的多态,在运行时根据RTTI原则来调用正确的函数;

UML图如下:

在这里插入图片描述
假若一个手机生产厂商,有三个平台的芯片(高通、展讯、MTK),现在要求开发人员提供一个工具读取手机里面的IMEI号,简单工厂模式代码如下

#include<iostream>
#include <assert.h>
using namespace std;

class PHONE
{
public:
	virtual void ReadImei(){}//读取imei号

};

//高通芯片
class QUALCOMM : public PHONE
{
public:
	void ReadImei()//读取imei号
	{
		cout<<"QUALCOMM::ReadImei()"<<endl;
	}
};
//MTK芯片
class MTK : public PHONE
{
	public:
	void ReadImei()//读取imei号
	{
		cout<<"MTK::ReadImei()"<<endl;
	}
};

//展讯芯片
class SPREAD : public PHONE
{
public:
	void ReadImei()//读取imei号
	{
		cout<<"SPREAD::ReadImei()"<<endl;
	}

};



class  WATCHFACTORY
{
	PHONE * m_phone;
public:
	//提供一个创建对象的接口
	PHONE* CreateWatch(int p_type)
	{
		switch(p_type)
		{
		case 1:
			m_phone =  new QUALCOMM();
			break;
		case 2:
			m_phone =  new MTK();
			break;
		case 3:
			m_phone =   new SPREAD();
			break;
		default:
			return NULL;
		}
		return m_phone;
	}
};

int main()
{	
	//先实例化一个工厂
	WATCHFACTORY * m_fac = new WATCHFACTORY();

	//工厂创建高通芯片手机
	PHONE *myphone_qualcomm = m_fac->CreateWatch(1);//多态产生,用父类指向子类
	assert(NULL !=myphone_qualcomm);//判断mywatch不为空
	myphone_qualcomm->ReadImei();

	//工厂创建MTK芯片手机
	PHONE *mywatch_mtk = m_fac->CreateWatch(2);//多态产生,用父类指向子类
	assert(NULL !=mywatch_mtk);//判断mywatch不为空
	mywatch_mtk->ReadImei();

	delete m_fac;
	delete myphone_qualcomm;
	delete mywatch_mtk;
	return 0;
}

简单工厂模式下,加入突然有一天开始生产海思芯片,那这个时候就要修改WATCHFACTORY 类的CreateWatch 接口,加上对应的海思的case,还要加上一个海思的class , 这样就违背了开闭原则:对扩展开放,对修改关闭。
但是简单工厂模式的优点就是其类的结构关系特别清晰简单,很容易理解。

1、简单工厂模式实现计算器功能 简单工厂模式实现计算机功能 文章目录简单工厂模式实现计算机功能简介创建型模式简单工厂模式概述流程结构理解类图优点缺点适用环境练习题目源代码 简介 创建型模式 了解简单工厂模式之前,首先要先了解下创建型模式,接下来的Java设计模式的学习,将会逐步学习创建型模式下的6种模式。 创建型模式描述如何将对象的创建和使用分离,让用户在使用对象时无须关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修改和扩展。 在GoF设计模式中包含5种创建型模式,通常将一种非GoF设计模式——简单工厂模式作为学习其他工厂模式 阅读详情

相关推荐

3D点云目标检测Complex-YOLO(训练篇)(一)———KITTI数据集预处理与制作

KITTI dataset Download dataset KITTI 3D Object Detection Evaluation 2017 link 下载四个部分,共41.4GB 解压后为四部分内容(相机校准矩阵calib、RGB图像image_2、标签label_2、点云数据velodyne) 对应的testing和training数据。其中,training数据为7481张(图片和点云对应的场景),testing数据 7518张(无label_2数据)。 Data Preprocess

“知识最大的敌人不是无知,而是错觉” 7153

C++之工厂(factory)模式

0. 简介 继单例模式写完后,我觉得对于C++的高级用法可以来开一个专栏来专门整理与阐述,这里,我将以我们最常用的工厂模式开始,来逐步的共同学习。 https://www.cnblogs.com/hebaichuanyeah/category/824625.html ......

lovely_yoshino的博客 1万+

KAN神经网络实战:如何用Python快速搭建你的第一个可解释性模型

本文提供了使用Python和PyTorch快速搭建首个KAN(Kolmogorov-Arnold Networks)神经网络模型的实战指南。通过对比传统MLP,详细解析了KAN利用可学习的边函数实现更高可解释性的核心原理,并逐步演示了从环境配置、数据准备、核心模块实现到模型训练与可视化的完整流程,帮助开发者掌握这一新兴的可解释性AI模型构建方法。

convnet3designer的博客 474

C++工厂模式

条件:将该类的构造函数私有化,目的是禁止其他程序创建该类的对象,同时也是为了提醒查看代码的人我这里是在使用单例模式,防止他人将这里任意修改。指向自己实例的私有引用在被类方法(creatinstance)调用时被初始化,只有静态成员变量才能在没有创建对象时进行初始化,并且类的静态成员在第一次使用时不会再被初始化,保证了单例,因此设置为静态。通过类方法(creatinstance) 获取instance,类属性instance为静态的(static),则需要类的静态方法才能调用,因此该类方法应设为静态的。

zt18786458319的博客 3069

clumsy一款模拟弱网的工具

利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果。

klb5555的专栏 2553

WinInet 编程:MFC 中的互联网编程

WinInet 是一套 Windows API(应用程序编程接口),用于实现互联网应用程序的网络通信和数据传输。WinInet 抽象了底层网络协议和硬件细节,为程序员提供了一套统一的接口,简化了互联网应用程序的开发过程。WinInet 广泛应用于各种 Windows 应用程序中,包括网页浏览器、下载管理器、网络游戏等。MFC WinInet 是一套强大的类库,为 MFC 程序员提供了在 Windows 平台上实现互联网通信和数据传输的工具。

JAZJD的博客 1639

C++之工厂模式

对于工厂模式(简单工厂、工厂方法、抽象工厂)的总结。

flyingcloud6的博客 5621

V2签名预装失败原因及解决方案

GOOGLE最新的GTS要求targetSdkVersion 大于30的APK必须使用V2及以上签名。 但实际在预装过程中,GTS测试会失败。 后面发现这是由于预装方式的原因造成的。原来的预装方式是使用APK,指定APK使用预签名的方式。Android.mk如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := DKTest LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_TAGS

zyfzhangyafei的专栏 6305

c++ 工厂模式

工厂模式(FactoryPattern)是设计模式中的一种,属于创建型模式。它的核心思想是为了解耦对象的创建过程与使用过程,让代码更加灵活,易于扩展和维护。工厂模式通过引入一个工厂类来负责对象的创建,而客户端代码只需要与这个工厂类交互,无须关心具体的对象创建细节。封装性:隐藏了对象创建的具体逻辑,客户端代码不需要知道对象是如何被创建出来的。开放封闭原则:当需要添加新的产品时,只需要增加一个新的具体产品类和修改工厂类(或新增一个工厂子类),不需要修改现有代码,符合软件设计的开放封闭原则。

weixin_45672157的博客 2810

Windows 11 的C盘User(用户)文件夹下的用户文件夹名称的修改

背景介绍:由于系统重装导致Windows 11的系统用户名与C盘User(用户)文件夹下的用户名文件夹(公用文件夹旁边的文件夹)出现名称不一致,事例中系统用户名命名为“寂萧”,User(用户)文件夹下的文件夹名称却是“77555”。【QQ邮箱前五位真的真的看着很别扭】注:改名有风险,三思而后行。User(用户)文件夹下的用户名是中文在某些软件的应用场景下产生不便,导致很多软件莫名其妙报错,甚至无法使用,笔者不建议修改为中文名。//和笔者一样的强迫症除外//

2302_79084172的博客 10万+

基于 SquashFS 构建 Linux 可读写文件系统

嵌入式 Linux 启动过程 本文所描述的的 Linux Image 由 BootLoader、kernel、initrd、rootfs 组成,它们共同存在于一个可以启动的存储设备中(本文以 USB 为例)。组成架构如下: 图 1. 可启动 linux 镜像文件结构 各个模块的作用如下: Boot Loader:由 BIOS 加载,用于将后续的 Kernel 和 initrd 的装载到内存中 kernel:为 initrd 运行提供基础的运行环境 initrd:检测并加载各种驱动程序 ro

wzq2009的专栏 1174

Java与设计模式(九)创建型--简单工厂模式

一、需求 比如我想开发一套图表库,该图表库可以为应用系统提供各种不同外观的图表,例如柱状图、饼状图、折线图等,那我们可以这样写。代码如下: public class Chart { private String type; // 图表类型 public Chart(String type) { this.type = type; if (type...

qq_40134461的博客 260

杰理AC695N芯片跑iic接口的oled驱动分享

本文介绍了一个基于IIC接口的0.96寸OLED显示屏驱动程序,适用于SSD1306控制器。驱动采用软件模拟IIC方式,支持字符、数字、字符串、汉字和图片显示,测试平台为杰理AC695N系列芯片。硬件参数包括128×64分辨率,IIC接口(地址0x78),使用IO_PORTA_02(SDA)和IO_PORTA_03(SCL)引脚。驱动包含OLED主文件(oled.c/h)、软件IIC实现(soft_iic.c/h)和字体/图片数据文件(oledfont.h/bmp.h),可通过修改soft_iic.h中的引

qq_42014563的博客 883

灰度发布核心技术解析与实战指南

灰度发布是软件工程中实现渐进式迭代的核心技术,通过流量控制策略让新旧版本并行运行。其技术原理主要基于请求路由、环境隔离和特征分流,在微服务架构下常结合流量染色和功能开关实现。这种发布方式能有效降低系统变更风险,提升发布过程的可观测性,已成为DevOps实践中不可或缺的环节。典型的应用场景包括移动端APP更新、电商大促系统升级等,通过客户端分流、服务端路由等方案实现精准流量调度。在实际工程中,需要特别注意哈希算法的均匀性、数据隔离完整性等关键点,同时结合A/B测试框架进行效果验证。

weixin_33860553的博客 363

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

简单工厂模式(静态工厂方法模式)

目录 定义 为什么要使用工厂模式 模式结构 模式分析 实例 简单工厂模式的优点 简单工厂模式的缺点 适用环境 总结 定义 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是...

心猿意碼 9489

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

深入理解设计模式-简单工厂模式(静态工厂方法模式)

文章目录一、定义二、使用场景三、代码样例1.需求2.类图3.运算操作类4.操作工厂类5.客户端类四、优缺点结尾 一、定义 简单工厂模式是属于创建型模式,在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 二、使用场景 工厂类负责创建的对

少说,多做 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

创建型模式-简单工厂模式(静态工厂方法模式)

目录 1. 简单工厂模式概述 1.1 概念 1.2角色 1.3 类图 2. 简单工厂模式创建原理 3. 简单工厂模式的优缺点 3.1 优点 3.2 缺点 3.3 使用场景 1. 简单工厂模式概述 1.1 概念 简单工厂模式又称为静态工厂方法模式。将一个具体类的实例化交给一个静态工厂方法来执行定义一个类,根据参数的不同返回不同的类的实例。这些类具有公共的...

云上道人的博客 569

简单工厂模式(C++描述)

一.简单工厂模式又称静态工厂方法模式(Static Factory Method),它不是Gof 所讲的23种设计模式之一,但是它却是我们在编码过程中经常使用的方法之一。 1.静态工厂方法统一管理对象的创建。静态工厂方法通过传入的参数判断决定创建哪一个产品的实例,封装了对象的创建,客户端只管消费,实现了对责任(模块)的分割。2.静态工厂方法推迟了产品的实例化。通过XML配置文件就能改变

一步一步 1万+

java静态工厂方法与工厂模式

静态工厂方法和工厂模式很像,但是在java中还是有很大区别的。(一)静态工厂方法vs工厂模式对于一个类来说,为了让客户端获得一个自身的实例,最常用的方法就是提供一个公有的构造器。除了这种使用构造器的方法之外,对于单个类来说,我们可以定义静态工厂方法来获取自身的类的一个实例。静态工厂方法和工厂模式的不同也体现在此,静态工厂方法是获取这个类自身的一个实例,他的存在是为了更好的描述和处理这个类。而工厂模式

往事散云烟,十寸光阴换一钱 9104

简单工厂模式(静态工厂方法(Static Factory Method)模式)

简单工厂模式 所谓的简单工厂模式-----------这里百度百科里面的解释:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工引用百度厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 简单点说就是一个工厂类根据传入

sundaysunshine的博客 1733

android 静态工厂方法,Android 源码中的静态工厂方法

我们知道工厂模式有三兄弟,通常我们说的工厂模式指的是工厂方法模式,它的应用频率最高。本篇博客分享的简单工厂模式是工厂方法模式的“小弟”,确切的来讲它不属于设计模式,而是一种方法。此外,工厂方法模式还有一位“大哥”——抽象工厂模式。今天我们来分享一下简单工厂模式的一些情况,以及它在Android源码中的应用。定义简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Metho...

weixin_39616547的博客 138

简单工厂模式

 简单工厂模式解释:         简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 简单工厂模式的UML图:         简单工厂模式中包含的角色及其相应的职责如下

vwinner的博客 9万+
上一篇: InvokeRequired和Invoke
下一篇: 策略模式
越甲八千
博客等级 码龄11年 2959粉丝 553原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值