【谈一谈】我们所用的三种工厂模式优缺点

news2024/11/15 19:50:51

【谈一谈】我们所用的三种工厂模式优缺点

在这里插入图片描述

Hello!!大家好啊,好久也没有进行文章的更新了,原因嘛,最近的工作任务量有点大,导致摸鱼充电的时间大量减少,哈哈哈(你别说,这是借口嘛!)

不过,今天是星期六,难的能够在这里分享下最近在工作中,我用到的三种工厂模式(简工抽),有啥区别呢?,

特别对刚工作小白来说,怎么选择何时用呢?这里为此我特地写篇文章来解决此问题


万变不离其宗

本文总纲:

在这里插入图片描述

三种工厂模式

我们知道工厂模式无非就三种:(简称简工抽)~啥意思?有点迷糊吧?大白话,就是按顺序,越来越复杂!

  1. 简单工厂模式: 一股脑的统统创建出来
  2. 工厂模式:
  3. 抽象工厂模式

~这里知道三种,但是具体啥样的,我们继续往下看:

三种工厂模式异同点:

上面已经做过简单的概括(很精华),但是那样说差别相同,估计你也会懵逼的,

所以我们一起往下探索(就是要刨根问底儿!我们要的就是读完就懂!就牛逼了!哈哈哈)

三者的关系图:

(这个图我是借鉴大佬的哈哈哈)~(你会问:为啥不用自己的啊?,因为自己总结的图没有人家生动易理解)

在这里插入图片描述

1.简单工厂模式

  • 简单工厂模式属于创建型模式,了解过的都知道它又叫Static Factory Method静态工厂方法模式

其实浓缩为一句话: 一个工厂创建所有的具体产品~(这句话,我解释下:)

啥意思呢?

  • 正如其名.简单就简单在此工厂模式:
  • 不管这个产品,后面用还是没用,我都给你在此工厂初始化的时候,
  • 统统一股脑的都创建出来~(就特么问你猛不猛!哈哈,统统就是全部)

说完这些,我们已经知道简单工厂模式七七八八了,我们继续往下看

简单工厂的优点:
  1. 简单(啥也不论,就特么简单!):调用者想创建一个对象,只需知道名称就可以调用
  2. 面向接口化:调用者只用关心产品的接口,对于产品实现等细节进行封装屏蔽
简单工厂缺点:
  1. 不符合开闭原则: 就是你 要增加一个产品,你就要修改原先的工厂类(就是动原先的源码逻辑了)
  2. 违反高内聚责任分配原则: 集中创建了所有的实例

注意: 高内聚低耦合责任分配原则: (这里补充下对此知识的说明)

高内聚低耦合是软件工程中的概念,主要用于面向对象的设计,是判断软件设计好坏的标准

高内聚

  • 是指一个软件模块内的各个元素彼此结合的紧密程度很高,

低耦合

  • 是指软件模块之间依赖程度很低。

高内聚低耦合的目的在于提高软件的可重用性移植性可维护性,增强系统的稳定性、可扩展性和灵活性。

类的角度来看,

  • 高内聚意味着一个类应该只做一件事,并且类的内部方法应该紧密联系,避免一个类中只有一个或很多个方法。
  • 低耦合则意味着类与类之间的关系应该简单明了,避免过强的关系,减少类与类之间的交互复杂度。

2.工厂模式

又叫Ploymorphic Factory–多态工厂模式,属于创建型模式

什么意思(简单复习下)?就是定义一个创建对象的接口,但让实现这个接口的类决定实例化哪个类(就是实例化子类实现)

浓缩一句话: 就是一个工厂方法只创建一个具体产品

此模式支持增加任意产品,新增产品不需要更改之前存在的工厂,只需要此产品对应的工厂(面向一对一,符合开放封闭原则)

优点:

继承简单工厂模式优点: 用户面向接口

符合开放-封闭原则(~这个是最重要的哦!面试回答的关键点)

缺点:

增加了系统的复杂性,不那么简单了:怎么说呢?就是新增一个产品时,需要增加一个对应新的工厂类

3.抽象工厂模式

这玩意没有别名了,哈哈哈(为啥子? 都特么抽象了,还能怎么起~哈哈哈)

复习下: 抽象工厂模式提供一个创建一系列相关或相互依赖对象接口,无需指定具体的类

浓缩一句话: 一个工厂只创建一类具体产品(如上面所说,增加产品族时,需要增加工厂;增加新产品时,就修改工厂)

补充下: 产品族(就是不同产品登记结构中,功能相关的产品组成的家族–举个例子: 如我们的人类族系: 赵氏宗族,叶氏宗族,就是两个宗族,有初步了解了吧?再举个产品例子: 比如产品: 小米系列和华为系列)

优点:

  • 隔离具体类的生成,客户只要用即可,不需要知道什么被创建
  • 增加新的具体工厂以及产品族是很方便

缺点:

  • 对于增加新产品等级结构更加复杂,需要修改抽象工厂和所有的具体工厂类

完结

好了,每天都进步一点点

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1483926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国内哪个工具可以平替chatgpt?国内有哪些比较好用的大模型gpt?

我自己试用了很多的平台,发现三个比较好的大模型平台,对普通用户也比较的友好的,而且返回内容相对来说,正确率更高的,并且相关场景插件比较丰富的国内厂商。 本文说的,是我自己觉得的,比较有主观…

linux之进程理解(1)

目录 1. 冯诺依曼体系结构 2. 操作系统(OS) 2.1 概念 2.2 设计OS的目的 2.3 定位 2.4 理解管理 3. 系统调用和库函数概念 4. 补充 1. 冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体…

HCIA-Datacom实验指导手册:8 网络编程与自动化基础

HCIA-Datacom实验指导手册:8 网络编程与自动化基础 一、实验介绍:二、实验拓扑:三、实验目的:四、配置步骤:步骤 1 完成交换机的 Telnet 预配置步骤 2 Python 代码编写 五、结果验证六、windows 计划任务程序配置七、 …

全部都有的子序列

思路(双指针) 先使用Set来存储总共有多少不同的数字,然后我们使用快慢指针去遍历数组,快指针每次遍历到一个数,将其加入到哈希表,哈希表使用pair存储,第一个元素存数字,第二个元素存…

2024最新算法:鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)求解23个基准函数(提供MATLAB代码)

一、鳑鲏鱼优化算法 鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)由Lida Zareian 等人于2024年提出。鳑鲏鱼在交配中,雄性和雌性物种相互接近,然后将精子和卵子释放到水中,但这种方法有一个很大的缺…

javaweb请求与响应

前言 前面介绍了对应的服务器端的相关代码。这里开始学习服务器端与客户端的数据请求与响应 这里的仅仅是一个简单的调用,并没有经过servelert接口来进行调用,同前面的一样,我们介绍对应的本地服务器进行的部署项目。 代码 //属于简单的不…

【Memory协议栈】Memory Abstraction Interface模块介绍

目录 前言 正文 1.功能简介 2.关键概念 3.关键类型定义 3.1 MemIf_StatusType 3.2 MemIf_JobResultType 3.3 MemIf_ModeType 4.关键API定义 4.1 MemIf_SetMode 4.2 MemIf_Read 4.3 MemIf_Write 4.4 MemIf_Cancel 4.5 MemIf_GetStatus 4.6 MemIf_GetJobResult 4…

2023年NOC大赛软件创意编程(学而思)赛道图形化小高组复赛试题

目录 第一题 闪烁的星星 第二题 聚沙成塔 第三题 画十字

#WEB前端(DIV、SPAN)

1.实验&#xff1a;DIV、SPAN 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; 类? 4.代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdev…

状态机设计原则系列之效率最大化

检测、搬运类设备,自动运行往往都设计状态机,搬运类对设备节拍往往要求很高,这里我们就需要合理的划分状态机了,使我们的执行效率最大化。有关状态机的系列文章可以查看下面相关文章链接: 1、机器流程控制之建立状态机 https://rxxw-control.blog.csdn.net/article/deta…

智能驾驶规划控制理论学习04-基于车辆运动学的规划方法

目录 一、线性二自由度汽车模型&#xff08;自行车模型&#xff09; 1、二自由度模型概述 2、不同参考点下的状态空间方程 3、前向仿真 二、运动基元生成方法 1、杜宾斯曲线&#xff08;Dubins Curve&#xff09; 2、Reeds Shepp Curve 三、多项式曲线&#xff08;Poly…

多线程(进阶四:线程安全的集合类)

目录 一、多线程环境使用ArrayList 二、多线程环境使用队列 三、多线程环境使用哈希表 1、HashMap 2、Hashtable 3、ConcurrentHashMap (1)缩小了锁的粒度 (2)充分使用了CAS原子操作&#xff0c;减少一些加锁 (3)针对扩容操作的一些优化&#xff08;化整为零&#xff…

优选算法|【双指针】283.移动零

题目 283. 移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12]输出: [1,3,12,0,0]示例 2: 输入…

基于ssm旅社客房收费管理系统+vue

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

PTA L2-005 集合相似度

给定两个整数集合&#xff0c;它们的相似度定义为&#xff1a;Nc​/Nt​100%。其中Nc​是两个集合都有的不相等整数的个数&#xff0c;Nt​是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。 输入格式&#xff1a; 输入第一行给出一个正整数N…

IEEE 802.1Qbv标准解析:为实时应用提供可靠网络基础设施

IEEE 802.1Qbv是IEEE 802.1家族中的一项重要标准&#xff0c;专门针对实时流量的时间敏感性进行优化。这一标准在网络通信领域&#xff0c;特别是在对实时性要求极高的应用中&#xff0c;如音视频传输、工业自动化、智能交通系统等&#xff0c;具有极其重要的地位。 在传统的以…

递推算法(c++)

递推可以说是递归反过来的一种算法&#xff0c;递归是从后往前倒着算&#xff0c;递推是从前往后正着算。 统计每个月兔子的总数 题目描述 有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;一对小兔子长到第三个月后每个月又生一对兔子&#xff0c; …

为什么HashMap的键值可以为null,而ConcurrentHashMap不行?

写在开头 今天在写《HashMap很美好&#xff0c;但线程不安全怎么办&#xff1f;ConcurrentHashMap告诉你答案&#xff01;》这篇文章的时候&#xff0c;漏了一个知识点&#xff0c;知道晚上吃饭的时候才凸显想到&#xff0c;关于ConcurrentHashMap在存储Key与Value的时候&…

ARM架构基础内容

文章目录 前言一、AAPCS二、中断调用过程三、FreeRTOS中任务切换的实质总结 前言 一、AAPCS AAPCS&#xff0c;全称为ARM Architecture Procedure Call Standard&#xff0c;是ARM架构下的过程调用标准。这个标准定义了在ARM架构中函数调用和返回的约定&#xff0c;以确保不同…

文件底层的深入理解(1)

一、文件学习的简单铺垫 我们都知道&#xff0c;文件等于文件内容加上文件属性。访问文件之前都得先通过进程才能打开相应的文件&#xff0c;一个进程可以打开多个文件。修改文件&#xff0c;都是通过执行代码的方式完成修改。要对文件进行修改&#xff08;或其他操作&#xff…