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

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

在这里插入图片描述

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

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

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


万变不离其宗

本文总纲:

在这里插入图片描述

三种工厂模式

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

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

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

三种工厂模式异同点:

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

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

三者的关系图:

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

在这里插入图片描述

1.简单工厂模式

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

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

啥意思呢?

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

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

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

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

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

高内聚

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

低耦合

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

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

类的角度来看,

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

2.工厂模式

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

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

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

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

优点:

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

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

缺点:

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

3.抽象工厂模式

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

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

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

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

优点:

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

缺点:

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

完结

好了,每天都进步一点点

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(十三)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型,由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”(そら sora),即天空之意,以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…

lv20 QT 常用控件 2

1 QT GUI 类继承简介 布局管理器 输出控件 输入控件 按钮 容器 2 按钮示例 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QCheckBox> #include <QLineEdit> #include <QPushButton>class Widget : public QWidget {Q_OBJECTpublic…

mac苹果电脑c盘满了如何清理内存?2024最新操作教程分享

苹果电脑用户经常会遇到麻烦:内置存储器(即C盘)空间不断缩小&#xff0c;电脑运行缓慢。在这种情况下&#xff0c;苹果电脑c盘满了怎么清理&#xff1f;如何有效清理和优化存储空间&#xff0c;提高计算机性能&#xff1f;成了一个重要的问题。今天&#xff0c;我想给大家详细介…

2024年还可以做量化交易吗?散户怎么实现快速通道?

首先先明确两个点&#xff1a;第一就是2024年也可以做量化交易&#xff01; 第二就是散户也可以实现快速通道&#xff01; 我们一个一个来解答&#xff1a; 先说量化交易&#xff1a; 散户也是可以做量化交易的&#xff0c;我们是最近看到很多量化交易被监管所罚的&#xff0c…

接上Promise()对象处理回调地狱:怎么用.then()?什么是Async、Await?

上一篇基于JavaScript基础的异步、同步操作&#xff0c;promise、.then()-CSDN博客讲了【啥是异步操作、同步操作&#xff1f;】然后简单讲了回调函数是啥、Promise()对象是啥、.then()函数是啥&#xff0c;这一篇讲讲promise()对象到底怎么配合.then()函数解决回调地狱&#x…

day08_分类品牌管理商品规格管理商品管理

文章目录 1 分类品牌管理1.1 菜单添加1.2 表结构介绍1.3 页面制作1.4 品牌列表加载1.4.1 后端接口BrandControllerBrandServiceBrandMapperBrandMapper.xml 1.4.2 前端对接brand.jscategoryBrand.vue 1.5 分类数据加载1.6 列表查询1.6.1 需求说明1.6.2 后端接口需求分析Categor…

热点一线总有神秘小盒现身,到底有什么神秘之处?高人气随身WiFi第一名,2024最值得购买的随身WiFi

近日&#xff0c;一位好事儿的网友突然将多个新闻热点的截图发在了自己的社交平台上&#xff0c;引起了大家的广泛关注。原来在这些记者报道一线新闻的时候&#xff0c;总有一个神秘小盒子在若隐若现。后经网友深扒得知这是格行品牌旗下的大热产品——格行随身WiFi。为什么格行…

Revit-二开之创建线性尺寸标注-(5)

创建线性尺寸标注 对应的Revit界面的按钮 线性尺寸标注源码 本篇文章实现的逻辑是从rvt文章中拾取一面墙,然后对墙添加再水平方向上的线性尺寸标注 protected override Result OnExecute(ExternalCommandData commandData, ref string message, ElementSet elements

简单的生活案例解释:关系图卷积网络(RGCN)

目录 1、用一个简单的生活案例来解释关系图卷积网络(RGCN)2、RGCN与FB15K-237文件格式详情数据集构成结合RGCN和FB15K-237参考文献1、用一个简单的生活案例来解释关系图卷积网络(RGCN) 假设你是一名社交媒体平台的工程师,你的任务是分析用户之间的关系,以便为他们推荐更…

Python用函数实现代码复用

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 生命对某些人来说是美丽的&#xff0c…

云时代【7】—— 存储卷

云时代【7】—— 存储卷 四、Docker&#xff08;四&#xff09;存储卷1. 存储卷&#xff08;1&#xff09;定义&#xff08;2&#xff09;分类 2. 相关指令&#xff08;1&#xff09;管理卷 VolumeA. 创建方式方式一&#xff1a;docker volume方式二&#xff1a;docker run -v …

Mybatis plusSwagger代码生成器

Mybatis plus 1.查询没找到请求参数 Parameter pageNum not found. Available parameters are [arg1, arg0, param3, param1, param2, username] 原因&#xff1a; Mapper文件中都要加上 Param("pageNum") Select("SELECT * FROM user where username like #{u…