学习笔记:设计模式之工厂模式

《C++20设计模式》学习笔记——第3章:工厂方法和抽象工厂模式 工厂方法是创建型设计模式的成员之一,它可以一次性完成一个完整对象的创建;与之相比,构造器模式则需要分步提供对象的部分信息才能逐步完成一个对象的创建。工厂方法的关键优势包括:工厂可以拒绝构建对象; 工厂方法可以是多态的;工厂方法的命名不受约束并且可以更有意义;工厂可以实现缓存和其他储存优化;工厂可以将对象不同的关注点内容封装(即关注点分离)。 阅读详情

我目前正在做一个上传下载模版,上传下载功能要在一个类中实现,但两个的参数是明显不同的,所以要创建不同的实例,若使用构造函数创建上传类和下载类,感觉“表达”不是很清晰。于是我就想到用工厂模式在“类外”创建实例。这便是我学习工程模式的缘由,但是后来发现,这太大材小用了。毕竟工厂模式的真正精髓在于代码可重用性。

网上的却有很多优秀的文章,他们把工厂模式讲得很清楚,很明白(比如这篇文章:http://www.cnblogs.com/poissonnotes/archive/2010/12/01/1893871.html#2605935)。但是却很少有人说明工厂模式究竟有什么用。而本文的宗旨就在于此。

一般的,我们将工厂模式分为三类:简单工厂模式;工厂方法模式;抽象工厂模式。

简单工厂模式:将产品的抽象出来。其实现方式分三步:

第一步:提取公共因子----方法或属性,到”产品接口“(以接口或抽象类实现)。这里说个题外话,C#的接口中不可包含字段,但是可以使用属性,即有取值器和访问器。

第二步:创建产品类,基础并实现”产品接口“。

第三步:创建工厂。工厂提供一个create方法来生产产品。该方法接收一个参数,然后根据这个参数决定具体生产哪个产品,然后利用向上转型返回”产品接口“。

第四步:调用。

比如:我们现在有一个音乐播放器,将来可能还要做一个视频播放器。

1.把方法----播放,暂停,结束,快进,快退----抽取出来,放入媒体接口中。

2.创建音乐类,继承并实现媒体接口。

3.创建媒体工厂,接收一个字符串,当为音乐时,创建音乐类,返回媒体接口。否则抛出一个异常。

4.在音乐播放程序中使用媒体工厂实例化一个媒体接口,调用接口提供的方法。

OK,现在来看一下,将来做视频播放器时需要做的工作。

1.copy媒体接口

2.创建视频类,继承并实现媒体接口。

3.copy媒体工厂。

4.修改媒体工厂,添加一个判断,当参数为视频时,创建视频类,返回媒体接口。

5.copy音乐播放代码,将实例化时的参数该为视频。

现在工厂模式的作用很明显了,代码重用,只修改了少量的地方。

一个好的设计应该实现高内聚,低耦合。简单工厂模式每次都必须修改工厂类,这是不合理的。为了解决这个问题,工厂方法模式应运而生。

相对于简单工厂模式,工厂方法模式对工厂进行”提炼“,做出一个”工厂接口“(这儿推荐使用抽象类实现,毕竟接口不支持static方法)。

我们还是来看这个例子。

前两步与简单工厂模式相同,我们从第三步开始。

3.创建”媒体工厂接口“,规定返回值为媒体接口。

4.创建音乐工厂,继承并实现“媒体工厂接口”。

5.调用。

现在来看下,将来要做视频播放器所要做的工作。

1.copy媒体接口。

2.创建视频类,基础并实现媒体接口。

3.copy“媒体工厂接口”。

4.创建视频工厂,继承并实现“媒体工厂接口”。

5.copy音乐播放器代码,修改,将实例化工厂接口所用的类换为视频工厂。

可以很明显的看出,视频播放器重用了音乐播放器的代码,而且又很好的分离了出来,互不影响。

那么,抽象工厂模式又是什么呢?

它不过多一个层级关系而已,一个工厂可以生产多个互有关联产品。说到底还是可以用简单工厂或工厂方法模式来实现。但是做为好的设计,我们还是应该以工厂方法模式来实现,即将这个可以生产多个产品的工厂再次“提取”,做出一个“接口”。

Scissor算法实战:利用bulkRNA表型数据精准定位单细胞亚群 本文详细介绍了Scissor算法的实战应用,该算法通过整合bulkRNA-seq的丰富表型信息与单细胞数据,精准识别与特定临床结局(如不良预后)相关的单细胞亚群。文章深入解析了算法三步走的核心思想,并提供了适配Seurat v5的完整代码解决方案,帮助研究者从海量数据中提炼具有生物学和临床价值的洞见。 阅读详情

相关推荐

手把手教你用Simulink搭建单相全桥逆变器(附单电流闭环控制仿真文件)

本文详细介绍了如何在Simulink中搭建单相全桥逆变器并实现单电流闭环控制。从功率主电路建模、核心器件参数设置,到控制系统的PI调节与前馈补偿,提供了完整的仿真步骤与调试技巧。文章旨在通过动手实践,帮助读者跨越理论与仿真的鸿沟,深入理解电力电子闭环控制的核心原理。

d6e7f8g9h的博客 316

JS设计模式——7.工厂模式(示例-RSS阅读器)

RSS阅读器 由于我们只想跟RSS容器对象打交道,所以用一个工厂来实例化这些内部对象并把它们组装到一个RSS阅读器中. 使用工厂方法在好处在于,我们创建的RSS阅读器类不会与那些成员对象紧密耦合在一起. RSS阅读器的成员对象 成员对象1: xhr 这个对象就是上一篇中介绍过的,所以就不再说了. 成员对象2: 显示类 为了满足RSS阅读器类的需要,它需要实现几个方法. var ...

weixin_30535043的博客 158

HC32F460 FPU实战:从零开启硬件浮点加速

本文详细介绍了如何在HC32F460开发板上启用和优化FPU(浮点运算单元),以显著提升硬件浮点运算性能。从工程配置、关键代码修改到实战优化技巧,全面解析FPU加速的实现方法,并分享常见问题的解决方案,帮助开发者避免常见陷阱,充分发挥HC32F460的硬件潜力。

weixin_42620340的博客 348

RSS订阅神器 —— Inoreader

一、Inoreader简介根据维基百科的介绍 Inoreader是基于网络的内容和RSS摘要阅读器,适用于网络浏览器的云服务和运行iOS和Android的移动设备。它以统一的布局编辑用户的在线来源的新闻源,以自定义和与他人分享。Inoreader于2013年被Innologica首次发布 Inoreader is a web-based content and RSS feed rea

Bison的博客 5万+

Python+Vue计算机毕业设计风电场监控系统的设计与实现7bd6i(程序+LW+源码+部署)

Python3.7.7+Django+Mysql5.7+pip list+HBuilderX(Vscode也行)+Vue+Pychram社区版。2. 前端:vue+css+javascript+jQuery+easyUI+highcharts。2.IDE环境:Python和Python 社区版都可以。Django + Vue +Python+Mysql 等等组成,B/S模式等等。该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。1. 后端:Python、Vue、Django、Mysql。

华信计算机毕设源码程序 342

设计模式——工厂模式

工厂模式源代码: #include #include using namespace std; class Fruit { public : virtual void getfruit() = 0; }; class Apple :public Fruit { public: void getfruit() { cout } }; clas

Na2Co3_Ren的博客 335

STK相关总结

STK简介 一.SIM卡应用工具包(SIM Application Toolkit),又名CAT/USAT,它包含一系列终端与SIM卡的交互指令,SIM卡可以应用卡内的小应用程序和终端交互,从而实现增值服务的目的,STK包括三种类,STK-imsi切换,STK –OTA,STK-BIP 功能: (1) Profile download:配置下载,开机初始化SIM卡过程中,终端告诉SIM卡终端支持哪些功能,STK中download指终端将数据发送给SIM卡 (2) Proactive command: 主动式

jingjing_2的博客 3356

设计模式学习笔记:工厂模式(Factory)

一、工厂模式介绍 工厂模式属于设计模式中的创建型模式。工厂模式提供了一种最佳的创建对象的方式。工厂模式从简单到复杂有三种:简单工厂、工厂方法、抽象工厂。 三种工厂模式的简单区分: 简单工厂:根据传递给工厂类的不同参数创建不同的产品。例如:给生产汽车的工厂传递不同的参数生

爱辰 1086

AI智算-K8s+vLLM & Ray:DeepSeek-r1 671B 满血版分布式推理部署实践

自从上次发布 【AI-智算】K8s+SGLang实战:DeepSeek-r1:671b满血版多机多卡私有化部署全攻略] 文章后,本次将演示另一个主流推理引擎工具——vLLM,结合K8s、LWS、Ray、Volcano等技术栈,部署DeepSeek-r1 671b 满血版分布式推理集群,并对比其与SGLang推理引擎的性能表现。

Kason_iWiki 1825

最新Python爬虫实战(入门爬虫篇)——案例1:某瓣网站Top250图片数据采集(附上完整爬虫代码)

本次案例通过Python爬虫技术实现了某瓣Top250电影封面的批量下载。代码采用模块化设计,函数实现cookies的自动解析,简化了配置流程,涵盖请求、解析、存储的完整流程。学习重点包括:抓包工具定位数据源、正则表达式匹配图片链接、模拟请求头绕过反爬机制、以及自动化文件管理。需要注意控制请求频率并遵守网站使用规范,适用于入门爬虫实践。

努力让自己发光,对的人才能迎着光而来 16万+

Spring源码学习笔记:经典设计模式之工厂模式

0、工厂模式(Factory Pattern) 工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。 工厂模式跟单例模式紧密相关 1、简单工厂模式( Simple Factory Pattern) 是指由一个工厂对象决定创建出哪一种产品类的实例 属于创建型模式,但它不属于GOF的23种设计模式。 简单工厂类负责创建的对象较少,客户端只需要传入工厂类的参数,对于如何创建

Jarvis.y的博客 458

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

设计模式学习笔记:工厂模式(简单工厂模式、工厂方法模式和抽象工厂模式)

目录 一、简单工厂模式 二、工厂方法模式 三、抽象工厂模式 一、简单工厂模式 简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static F...

YuZongTao 370

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

学习笔记:设计模式-工厂模式-java实现

设计模式-工厂模式简单工厂模式定义优点缺点实现工厂方法模式定义优点缺点实现抽象工厂模式定义优点缺点实现 简单工厂模式 定义 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。 优点 工厂类包含必要的逻辑判断,可以决定在什么时候创建哪一个产品的实例。客户端可以免除直接创建产品对象的职责,很方便的创建出相应的产品。工厂和产品的职责区分明确。 无需知道所创建具体产品的类名,只需知道参数即可 也可以引入配置文件,在不修改客户端代码的情况下更换和添加新的具体产品类 缺点 工厂类单

薛定谔的英短的博客 243

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Head First设计模式学习笔记:工厂方法

Head First设计模式学习笔记:工厂方法 .NET FCL中工厂方法的实例:枚举器 IEnumerable是工厂原型 IEnumerator是产品原型 List, ArrayList这些类都是建立产品的具体类,都实现了IE...

alieen_941124的博客 141

【设计模式学习笔记】2:认识工厂模式和抽象工厂模式

设计模式有很多种类型,见runoob上的分类。主要的三种设计模式:创建型模式、结构型模式、行为型模式,分别关注对象的创建、组合、通信,它们是实现业务的最基本的元素。 工厂模式 简述 使用工厂类创建产品对象时不会对外暴露创建逻辑。创建逻辑不见得仅仅是new调用构造方法,还可能包括一些初始化操作,工厂模式适合于完成复杂对象的创建,简单对象(如new直接创建的对象)不需要使用工厂模式,因为引入...

大桔骑士的学习笔记 426

2022Java学习笔记九十六(设计模式:工厂设计模式、装饰模式)

2022Java学习笔记九十六(设计模式:工厂设计模式、修饰模式) 一、工厂设计模式 什么是工厂设计模式? 之前我们创建类对象时,都是使用new 对象的形式创建,在很多业务场景下也提供了不直接new的方式。 . 工厂模式(Factory Pattern)是Java 中最常用的设计模式之一, 这种类型的设计模式属于创建型模式,它提供了一种获取对象的方式。 工厂设计模式的作用: 工厂的方法可以封装对象的创建细节,比如:为该对象进行加工和数据注入。 可以实现类与类之间的解耦操作(核心思想) 实例代码 工厂模式

我要记录学习博客 504

C#设计模式学习笔记:(2)工厂方法模式

本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7567880.html,记录一下学习过程以备后续查用。 一、引言 接上一篇C#设计模式学习笔记:简单工厂模式(工厂方法模式前奏篇),通过简单工厂模式的了解,它的缺点就是随着需求的变化我们要不停地修改工厂里 面的方法的代码,需求变化越多,里面的if–else也越多,这样就会造成简单工厂的实现逻辑过于复杂。 依设计原则里的开闭原则--对增加代码开放,对修改代码关闭,我们不能总是这样修改简单工厂里面的方法。 下面看看工

chinaherolts2008的博客 202

【2013-10-16】设计模式学习笔记:工厂模式

介绍 Java 工厂模式的两种形式:简单工厂模式通过静态方法按类型字符串创建对象;抽象工厂模式通过 Provider 接口屏蔽调用方与具体实现的耦合,适合跨平台或多实现切换的场景。

cstriker1407的专栏 230

设计模式学习笔记(1):工厂模式

今天开始决定学习设计模式,教程是Pattern In Java,网上很有名的一本入门级设计模式教程。看了前面的大致介绍,语言确实很平实,丝毫不晦涩。决定每天学习一种模式,并记录下来,权当自己的加深理解的一种记录。 (注:里面有很多文字代码都是源自板桥里人的Pattern In Java,大家有兴趣可以参照原书地址:[url]http://www.jdon.com/designpatterns...

iteye_1614的博客 108

Java设计模式学习笔记,二:工厂模式

  工厂模式,主要实现了创建者和调用者的分离。   分类:1、简单工厂模式;2、工厂方法模式;3、抽象工厂模式。   核心:实例化对象时,用工厂方法代替new操作。   一、简单工厂模式     也叫静态工厂模式,工厂类中实现静态方法,根据入参,生产不同的产品,工程项目中常用。     工厂类作为类使用,产品类作为接口使用,具体产品实现接口,用来生产同一等级结构中的任意产品,当新增...

weixin_30924239的博客 79

转:【HeadFirst 设计模式学习笔记】4 工厂模式

原文出处:http://www.cnblogs.com/gnuhpc/archive/2012/12/17/2822403.html   1.我们在前边提到一个原则就是“面向接口而不要面向实现编程”,但是我们一直在使用Duck duck = new MallardDuck()这样的模式,后边的new语句却违反了这个原则。工厂方法就可以解决这个问题,它用来封装对象的创建。 2.这一节我们考...

jijiaa12345的专栏 139

小滴课堂-学习笔记:(4)创建型设计模式-工厂模式和应用

愿景:"让编程不再难学,让技术与生活更加有趣" 更多架构课程请访问 xdclass.net 目录 第1集 原生社会过渡-常见的工厂设计模式 第2集 电商支付应用案例-简单工厂模式实践指南 第3集 工厂设计模式实践指南-工厂方法模式《上》 第4集 工厂设计模式实践指南-工厂方法模式《下》 第5集 工厂设计模式实践指南- 抽象工厂方法模式《上》 第6集 工厂设计模式实践指南- 抽象工厂方法模式《下》 干货文档 第1集 原生社会过渡-常见的工厂设计模式 简介:介绍常见的工厂设计模式和..

dev666的博客 323

设计模式:学习笔记(3)——简单工厂模式

设计模式:学习笔记(3)——工厂模式 简单工厂模式 理解   简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。 实现...

weixin_30378623的博客 124

Java设计模式——工厂模式

本文对设计模式中工厂模式进行思想和原理的讲解,引用实际例子来方便理解。

weixin_56032340的博客 8632

设计模式之工厂模式

工厂模式 1、简单工厂模式 1.1、定义 简单工厂模式(Simple Factory Pattern)是指有一个工厂对象决定创建出哪一种产品类的实例,不属于23种设计模式。 简单工厂是产品的工厂 1.2、应用场景 简单工厂模式适用于工厂类创建的对象较少的场景,且客户端只需要传入工厂参数,对如何创建对象的逻辑不需要关心。 1.3、缺点 工厂类的职责相对过重,增加新的产品时需要修改工厂类的判断逻辑,违背了开闭原则。 不易于扩展过于复杂的产品结构。 1.4、实例 支付接口规范: public interface

aaa31203的博客 16万+
上一篇: 深入C语言数据类型转换
下一篇: 工作笔记:web service中使用linq 动态增减返回字段
abcdcb
博客等级 码龄16年 1粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值