傻瓜式3分钟理解:工厂模式(简单工厂+工厂方法+抽象工厂)

2023-10-27

一、给我一句话概括

简单工厂:工厂类中,根据条件决定一个接口由哪个具体产品类来实现。

工厂方法:创建多个工厂类。各个工厂类中,都对应一个获得接口A实例的方法。用户决定使用哪个工厂。

抽象工厂:对工厂方法进行扩展。各个工厂类中,再增加一个获得接口B实例的方法。

提一下,多个工厂类都继承自同一个接口。

二、这是什么鬼

1、工厂方法这样折腾,有意思吗,玩我呢?你不就是简单工厂披了个马甲?

2、抽象工厂,你和工厂方法有啥区别,你多个功能就敢自立门户了?

三、原来如此

工厂方法多加一层工厂封装类的意义在于:1、用户并不想关心产品接口是怎么实现的,如果这个实现过程和逻辑比较复杂呢?将这个过程封装到工厂类中,别的地方也可以重用;2、接口的具体怎么实现,全部交给另一个人去做(他写的产品类)。如果添加一个新产品,那么他再添加一个工厂类和产品类,用户使用这个工厂类即可。

工厂类可以继承于某个接口,或是抽象类,工厂类已经对产品类的实现就行了封装,用户用它结合配置参数和反射实现动态创建,是很合理的。相比简单工厂是不太合适的。

代码底层,当产品类创建分支是固定或是其他类似的地方很少时,用简单工厂很合适。因为一旦增加分支,改的地方很少。如果不是,建议用工厂方法。

抽象工厂和工厂方法没有本质区别,是对工厂方法的扩展。当产品类,涉及到多个产品簇时,需要对同类的产品抽象为一个接口。工厂类中,可以定义多个返回具体产品的方法,自由组合。

每天一更,喜欢可以关注。

学会总结,你会发现另一个世界。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

傻瓜式3分钟理解:工厂模式(简单工厂+工厂方法+抽象工厂) 的相关文章

  • mysql修改表操作(DDL)

    1 修改表名 alter table 表名 rename 新表名 2 添加表字段 1 默认加到最后 alter table 表名 add 新字段 类型 字段完整性约束条件 2 指定加到某个字段之后 alter table 表名 add 新字
  • k8s-kubernetes错误集锦总结-环境搭建篇

    k8s kubernetes错误集锦 随笔 学习总结 写给以后的自己看的 所以文章会比较随意 root centos7 k8s auto kubectl get nodes The connection to the server loca

随机推荐

  • 【华为OD机试】太阳能板最大面积【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 给航天器一侧加装长方形或正方形的太阳能板 图中的红色斜线区域 需要先安装两个支柱 图中的黑色竖条 再在支柱的中间部分固定太阳能板 但航天器不同位置的支柱长度不同 太阳
  • NPOI组件下载、引用、基本使用

    前言 NPOI是一组dll库文件 也叫COM组件 对于Excel表格用代码操作 主要有三种方式 1 OLEDB类似于数据库的操作 需要安装AccessDataBase数据库引擎 2 Office组件 也是引用dll文件 依赖Office软件
  • openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing det

    报错 此错误消息表明您已达到API的最大月支出 硬限制 这意味着您已经消耗了分配给计划的所有积分或单位 并且已经达到计费周期的限制 这种情况可能有几个原因 例如 您使用的是高容量或复杂的服务 每个请求需要消耗大量的信用额度或单位 您使用的是
  • OBS推流工具介绍及桌面录屏推流功能实现

    OBS推流工具介绍及桌面录屏推流功能实现 文章目录 OBS推流工具介绍及桌面录屏推流功能实现 1 OBS工具介绍 2 OBS工具安装及简单使用 2 1 安装步骤 2 2 简单使用介绍 3 OBS实现桌面录屏推流工具实现 4 总结 流媒体开发
  • 第十二届蓝桥杯c++b组

    问题 New Online Judge 1 空间 P1555 蓝桥杯2021初赛 空间 New Online Judge ecustacm cn 1MB 1024KB 1KB 1024B byte字节 1B byte字节 8b bit位 2
  • OpenGL平台上的Teapot绘制与渲染(代码详细注释)

    include
  • dcdc芯片效率不高的原因_DCDC变换器轻载时三种工作模式

    目前高频高效的DCDC变换器的应用越来越广泛 通常在满输出负载时 DCDC变换器工作于CCM即连续电流模式 但是 当系统的输出负载从满载到轻载然后到空载变化的过程中 系统的工作模式也会发生相应的改变 下面以降压型Buck变换器为例说明DCD
  • Qt6 for Android 环境搭建

    作者 一去 二三里 个人微信号 iwaleon 微信公众号 高效程序员 说起 Qt 各平台的开发环境搭建 最难的当属 Android 环境 因为要配置的东西比较多 而且配置过程很容易出现问题 例如 JDK Android SDK NDK 等
  • Python调用Stata

    一 软件要求 python3 Stata 17 PyCharm 二 环境配置 2 1 stata基础配置 stata激活 无论是MP版本 还是SE版本 都需要进行证书激活 即在stata安装目录下 存在LIC文件 stata中配置pytho
  • 202324读书笔记

    202323读书笔记 一枝瘦骨写空山 金农画的金石气 以一枝瘦骨 写空山之妙 一枝瘦骨写空山 金农画的金石气 文人画的真性 作者朱良志 荷风四面 人在当中 消受这世界的清凉 也回应这世界的灵韵 生命智慧 是金农之绘画艺术具有长久生命力的基点
  • Think in java书籍阅读小结

    一 博客说明 本篇博客为本人看完think in java这本书后 个人查漏补缺的一些知识点 记录下来作为笔记使用 二 变量初始化顺序 在一个类里 变量初始化的顺序是由变量在类内的定义顺序决定的 即使变量定义大量遍布于方法定义的后面 那些变
  • python如何处理表格,将其转换为CSV,直接编辑或调用CSV模块

    python如何处理表格 将其转换为CSV 直接编辑或调用CSV模块 1 csv文件优点 2 csv 与 txt 3 写入csv文件方法 3 1 方法一 直接写入 3 2 方法二 调用CSV模块 4 读取CSV文件 pycharm 工作路径
  • Python的随机矩阵生成

    导入模块 random模块 numpy中的random函数 python中有两个模块可以生成随机数 该博客以的numpy模块为例进行生成随机数 因为矩阵要生成大量的随机数据 故推荐使用numpy模块生成随机数 生成随机数 以矩阵为例 生成随
  • 将未经安全技术处理的计算机,4322【标准答案】单选题 1. 将未经安全技术处理的退出使用的涉密计算机、涉密存储设备____或者改作其他用途的。依法给予处分;构成犯罪的,依法追究刑事责任。 A: 赠送...

    lt gt 标准答案 单选题 1 将未经安全技术处理的退出使用的涉密计算机 涉密存储设备 或者改作其他用途的 依法给予处分 构成犯罪的 依法追究刑事责任 A 赠送 B 出售 C 丢弃 D 以上都是 习题 单选题 1 将未经安全技术处理的退出
  • vscode里面配置Git默认终端

    文章目录 前言 一 为什么VsCode的终端默认文件选择项里面会没有Git的终端配置 二 配置默认Git终端 1 打开settings json文件 2 将配置找到 小编亲测 3 找到Git路径 4 结果 总结 废话很多 看完就对能行 前言
  • OpenCV-Python绑定如何工作及如何扩展新模块到Python

    OpenCV Python绑定如何工作及如何扩展新模块到Python 1 OpenCV Python 绑定的基本版本 2 如何将OpenCV的新模块扩展到 Python 参考 这篇博客将介绍 OpenCV Python 绑定是如何生成的以及
  • 127.0.0.1拒绝了我们的连接请求

    问题描述 浏览器打不开127 0 0 1 显示拒绝连接 试着ping了一下 需要指明一点 1是ipv6的地址 但正常localhost应该指向127 0 0 1 使用Windows自带的网络诊断工具 出现了 127 0 0 1未设置为接受端
  • 【毕业设计】便携式STM32的红外信号分析仪 - 单片机 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 5 部分核心代码 5 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉
  • C#开发之——GetType方法(6.5)

    一 概述 C 中GetType方法用于获取当前实例的类型 返回值为System Type类型 C 中GetType方法不含有任何参数 是非静态方法 使用任何对象都能直接调用该方法 二 实例 创建字符串类型的变量 整数类型的变量以及Stude
  • 傻瓜式3分钟理解:工厂模式(简单工厂+工厂方法+抽象工厂)

    一 给我一句话概括 简单工厂 工厂类中 根据条件决定一个接口由哪个具体产品类来实现 工厂方法 创建多个工厂类 各个工厂类中 都对应一个获得接口A实例的方法 用户决定使用哪个工厂 抽象工厂 对工厂方法进行扩展 各个工厂类中 再增加一个获得接口