当前位置: 首页 > news >正文

【设计模式】第5节:创建型模式之“简单工厂、工厂方法和抽象工厂模式”

一、简单工厂模式

请添加图片描述

ProductFactory是创建商品的工厂,商品Product可以实现Product接口中的一些功能。

当需要根据入参的不同生成多种不同的产品时,可以将生成不同产品的逻辑剥离出来,使用产品工厂创建不同的产品。

二、工厂方法

请添加图片描述

ConcreteFactory是具体工厂,用来创建具体产品ConcreteProduct,ProductFactory是创建工厂的工厂,用来创建具体工厂。具体商品ConcreteProduct可以实现Product接口中的一些功能。

三、抽象工厂

请添加图片描述

当需要生成多种产品,每种产品又有多种分类时,就可以采用抽象工厂了。产品工厂ProductFactory用来重建各种大类的产品Product1和Product2,具体工厂ConcreteFactory用来创建各自产品中更细小的分类。

四、适用场景

之所以将某个代码块剥离出来,独立为函数或者类,原因是这个代码块的逻辑过于复杂,剥离之后能让代码更加清晰,更加可读、可维护。

当创建逻辑比较复杂的时候,就考虑使用工厂模式,封装对象的创建过程,将对象的创建和使用相分离。下面是两种创建逻辑比较复杂的场景:

  • 代码中存在if-else分支判断,动态地根据不同的类型创建不同的对象。针对这种情况,我们就考虑使用工厂模式,将这一大坨if-else创建对象的代码抽离出来,放到工厂类中。
  • 尽管我们不需要根据不同的类型创建不同的对象,但是,单个对象本身的创建过程比较复杂,比如要组合其他类对象,做各种初始化操作。在这种情况下,也可以考虑使用工厂模式,将对象的创建过程封装到工厂类中。

对于第一种情况,当每个对象的创建逻辑都比较简单的时候,更推荐使用简单工厂模式,将多个对象的创建逻辑放到一个工厂类中。当每个对象的创建逻辑都比较复杂的时候,为了避免设计一个过于庞大的简单工厂类,推荐使用工厂方法模式,将创建逻辑拆分得更细,每个对象的创建逻辑独立到各自的工厂类中。同理,对于第二种情况,因为单个对象本身的创建逻辑就比较复杂,所以,建议使用工厂方法模式。

相关文章:

  • vue重修之Vuex【下部】
  • P-MOS管开关机控制电路(手动按键控制和自动采样信号触发控制)
  • 蓝桥杯每日一题2023.10.22
  • Python基础学习004——for循环与字符串
  • 【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】
  • Java 通过反射修改字符串 String 类型变量的取值而不改变字符串变量的指向
  • 【方法】如何给PDF文件添加“打开密码”?
  • 最近面试遇到的高频面试题
  • [数据分析与可视化] 基于Python绘制简单动图
  • C语言--程序环境和预处理(宏)
  • 做过哪些外设驱动?
  • 【网络安全 --- xss-labs靶场通关(11-20关)】详细的xss-labs靶场通关思路及技巧讲解,让你对xss漏洞的理解更深刻
  • Gdb调试
  • 说一说ajax的请求过程?
  • 做外贸为何离不开WhatsApp?一文解封、养号、引流、促单全攻略!
  • 26. 通过 cilium pwru了解网络包的来龙去脉
  • 快递排序Java
  • gstreamer插件开发-Adding Properties
  • 搭建自己的搜索引擎——oh-my-search使用
  • 【会议征稿通知】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)
  • 我驻苏丹使馆建议在苏中国公民尽快撤离
  • 国家主席习近平同普京总统举行大范围会谈
  • 绿城约13.93亿元竞得西安浐灞国际港港务片区地块,区内土地楼面单价首次冲破万元
  • 国家主席习近平抵达莫斯科
  • 诺和诺德一季度减重版司美格鲁肽收入增83%,美国市场竞争激烈下调全年业绩预期
  • 外交部:解放军参加红场阅兵体现了中方对历史的尊重和铭记