“大话”-简单工厂、工厂方法、抽象工厂模式

本文深入解析三种工厂模式:简单工厂、工厂方法模式和抽象工厂模式。对比各自优缺点,阐述适用场景,帮助读者掌握设计模式核心,提升软件设计能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在又细读了一遍《大话设计模式》之后,对其中提到的3种工厂模式有些概念和使用上的模糊,因此结合书中讲解和码友们的资料,自我总结一下,供以后复习时参考。

1. 几种工厂模式的本质:

“工厂”二字,其含义是使用工厂(一个或一系列方法)去生产产品(一个或一系列类的实例)
有时候,我们常常会将生产产品的一个或一系列方法封装到一个类中,我习惯把这个类叫做“工厂类”;而被实例化的类称作“产品类”。

2. 简单工厂:(不属于GOF-23)

UML类图:
在这里插入图片描述
工厂类(SimpleFactory)拥有一个工厂方法(create),接受了一个参数,通过不同的参数实例化不同的产品类。

优点:

(1)很明显,简单工厂的特点就是“简单粗暴”,通过一个含参的工厂方法,我们可以实例化任何产品类,上至飞机火箭,下至土豆面条,无所不能。所以简单工厂有一个别名:上帝类。
(2)简单工厂包含必要的判断逻辑,简单工厂实现了对象的创建和使用的分离。
(3)客户端无需知道所创建的具体产品类的类名,只需要具体产品类对应的参数即可!
(4)在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性

缺点:

(1)任何”东西“的子类都可以被生产,负担太重。当所要生产产品种类非常多时,工厂方法的代码量可能会很庞大。

(2)在遵循开闭原则(对拓展开放,对修改关闭)的条件下,简单工厂对于增加新的产品,无能为力。因为增加新产品只能通过修改工厂方法来实现。

工厂方法正好可以解决简单工厂的这两个缺点。

3. 工厂方法模式:

在这里插入图片描述
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类。

优点:

(1)工厂方法模式就很好的减轻了工厂类的负担,把某一类/某一种东西交由一个工厂生产;(对应简单工厂的缺点1)

(2)同时增加某一类”东西“并不需要修改工厂类,只需要添加生产这类”东西“的工厂即可,使得工厂类符合开放-封闭原则。

缺点:

(1)相比简单工厂,实现略复杂。

(2)对于某些可以形成产品族的情况处理比较复杂。

(3)抽象层的加入使得理解程度加大

对于缺点(2),我们可以借用抽象工厂来实现。

4. 抽象工厂模式:

在这里插入图片描述
提供一个创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类。

优点:

(1)易于交换产品系列,改变一个应用的具体工厂变的特别容易,只需要改变具体工厂则可以使用不同的产品配置生产出对应的产品。
(2)具体创建实例的过程与客户端分离,客户端通过他们的抽象接口操纵实例。
(3)针对产品族;

缺点:针对产品族。

所以,只有对应产品族的情况下,才需要使用抽象工厂模式。

5 区别

简单工厂 : 用来生产同一等级结构中的任意产品。(不支持拓展增加产品)

工厂方法 :用来生产同一等级结构中的固定产品。(支持拓展增加产品)

抽象工厂 :用来生产不同产品族的全部产品。(不支持拓展增加产品;支持增加产品族)

6 注意事项

(1)工厂类常常采用单例模式(Singleton)。

(2)工厂类拥有基类(定义共同接口),基类可以为纯虚类,也可以定义缺省方法。

(3)对于工厂方法和抽象工厂,基类中的生产产品的函数常常为虚函数,以实现动态绑定。

(4)调用工厂方法的函数通常采用工厂实现的指针和引用作为形参,以便根据不同的工厂实参调用不同的工厂方法。

内容概要:本文介绍了奕斯伟科技集团基于RISC-V架构开发的EAM2011芯片及其应用研究。EAM2011是一款高性能实时控制芯片,支持160MHz主频和AI算法,符合汽车电子AEC-Q100 Grade 2和ASIL-B安全标准。文章详细描述了芯片的关键特性、配套软件开发套件(SDK)和集成开发环境(IDE),以及基于该芯片的ESWINEBP3901开发板的硬件资源和接口配置。文中提供了详细的代码示例,涵盖时钟配置、GPIO控制、ADC采样、CAN通信、PWM输出及RTOS任务创建等功能实现。此外,还介绍了硬件申领流程、技术资料获取渠道及开发建议,帮助开发者高效启动基于EAM2011芯片的开发工作。 适合人群:具备嵌入式系统开发经验的研发人员,特别是对RISC-V架构感兴趣的工程师和技术爱好者。 使用场景及目标:①了解EAM2011芯片的特性和应用场景,如智能汽车、智能家居和工业控制;②掌握基于EAM2011芯片的开发板和芯片的硬件资源和接口配置;③学习如何实现基本的外设驱动,如GPIO、ADC、CAN、PWM等;④通过RTOS任务创建示例,理解多任务处理和实时系统的实现。 其他说明:开发者可以根据实际需求扩展这些基础功能。建议优先掌握《EAM2011参考手册》中的关键外设寄存器配置方法,这对底层驱动开发至关重要。同时,注意硬件申领的时效性和替代方案,确保开发工作的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pHscccr_Ayyx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值