设计模式-工厂模式-1-1

简介: 【6月更文挑战第10天】本文介绍了工厂模式的两种主要类型:简单工厂和工厂方法。简单工厂模式通过工厂类动态创建对象,例如根据配置文件后缀选择不同解析器。为提高可读性和复用性,可将创建逻辑封装到独立类中。当需添加新解析器时,可能涉及对工厂类的修改,但这在偶尔调整时可接受。工厂方法模式则通过多态消除if分支,增加扩展性,更符合开闭原则。当需要新增解析器时,只需创建实现特定接口的新工厂类。

一般情况下,工厂模式分为三种更为细分的类型:简单工厂、工厂方法和抽象工厂。其中,前两者的方法原理比较简单,在实际的项目里也比较常用;而抽象工厂的原理稍微复杂,在实际的项目中相对也不常用。所以,我们今天重点是前两种工厂模式,

简单工厂

在下面这段代码里,我们根据配置文件的后缀(json,xml,yaml, properties),选择不同的解析器(JsonRuleConfigParser, XmlRuleConfigParser),将存在文件中的配置解析成内存对象RuleConfig
2024-06-12-20-16-35-image.png

为了让代码逻辑更加清晰、可读性更好,我们要善于把功能独立的代码块封装成函数,按照这个设计思路,我们可以把代码中设计parse创建的部分逻辑剥离出来,抽象成createParse()函数。重构之后的代码如下所示:


2024-06-12-20-18-05-image.png

为了让类的职责更加单一、代码更加清晰,我们还可以进一步将createParse()函数剥离到一个独立的类中,让这个类只负责对象的创建。而这个类就是简单工厂模式类。


2024-06-12-20-20-18-image.png

大部分工厂类都是以Factory这个单词结尾的,但是也不是必须的;工厂类中创建对象的方法一般是create开头,比如代码里的createParser,但是也有的命名为getInstance(),createInstance(),newInstance,我们根据具体的场景和习惯来命名就好。

在上面的代码里,每次调用RuleConfigParserFactory的createParse的时候,都需要创建一个新的parser。实际上,如果parser可以复用,为了节省内存和对象创建的时间,我们可以把parser事先创建好缓存起来,类似单例模式和工厂模式的结合。


2024-06-12-20-23-10-image.png

思考1:对于上面两种简单工厂模式的实现方法,如果我们要添加新的parser,那势必要改动到RuleConfigParserFactory的代码,那是不是违反开闭原则呢?

如果不是需要频繁地添加新的parser,只是偶尔修改RuleConfigParserFactory代码,稍微不符合开闭原则,也是可以接受的。

思考2:第一种实现里,有一组if分支判断逻辑,是否需要用多态或其他设计模式替代?

如果if分支不是很多,代码中有if分支也是可以接受的。

使用多态或设计模式替代if分支判断逻辑,虽然提高了代码的扩展性,但是也增加了类的个数,牺牲了代码的可读性。

工厂方法

思考3:如果必须将if分支逻辑去掉,那应该怎么办?

比较经典的方法就是利用多态 重构后的代码如下:
2024-06-12-20-27-04-image.png

这就是工厂方法模式的典型代码实现,当新增一种parser的时候,只需要新增一个实现了IRuleConfigParserFactory接口的Factory类即可。所以,工厂方法模式比简单工厂更符合开闭原则

目录
相关文章
|
10月前
|
前端开发 JavaScript
jsPDF的常规使用
jsPDF的常规使用
279 62
|
网络协议 Java 物联网
Netty是什么?深入理解高性能网络框架
Netty是什么?深入理解高性能网络框架
544 1
|
SQL 数据库 Perl
PL/SQL中执行按钮变为灰色后如何恢复【已解决】
PL/SQL中执行按钮变为灰色后如何恢复【已解决】
820 0
|
编解码 物联网 异构计算
基于 PPDiffusers 训练DreamBooth LoRA微调生成中国山水画风格【livingbody/Chinese_ShanShui_Style】
基于 PPDiffusers 训练DreamBooth LoRA微调生成中国山水画风格【livingbody/Chinese_ShanShui_Style】
814 0
|
Kubernetes Devops Docker
基于微服务架构,实解容器级DevOps平台的建设
本文作者为普元软件产品部主任架构师顾伟,文章分享了基于微服务架构,建设可以同时运行在公有云和私有云上的容器云平台的实践经验,以及容器技术栈和架构等。
8541 0
kde
|
15天前
|
JSON Linux 数据格式
Docker镜像加速指南:手把手教你配置国内镜像源
配置国内镜像源可大幅提升 Docker 拉取速度,解决访问 Docker Hub 缓慢问题。本文详解 Linux、Docker Desktop 配置方法,并提供测速对比与常见问题解答,附最新可用镜像源列表,助力高效开发部署。
kde
9345 76
|
12天前
typora免费版,激活方法,Typora使用教程
Typora是一款简洁高效的Markdown编辑器,支持即时渲染。本教程涵盖安装方法、文件操作、视图控制、格式排版、字体样式及Markdown语法,助你快速上手使用Typora进行高效写作。
2387 6
|
5天前
|
云安全 人工智能 安全
|
18天前
|
人工智能 定位技术 API
Dify MCP 保姆级教程来了!
大语言模型,例如 DeepSeek,如果不能联网、不能操作外部工具,只能是聊天机器人。除了聊天没什么可做的。
2252 34