创建型设计模式之抽象工厂(Abstract Factory)模式

2023-11-13

定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。


用意:客户端在不必指定产品的具体类型情况下,创建多个产品族中某个产品对象。


定义图:



参与者:

抽象工厂(Creator:工厂方法核心,由一个接口或抽象类实现)

具体工厂类 (ConreteCreator:重定义工厂方法以返回产品实例对象)

抽象产品(Product是工厂方法模式所创立的对象的父类,或它们共同拥有的接口)

具体产品(ConcreteProduct,实现Product接口) 


具体实现设计:


位图:


上图可以看出,工厂方法模式是针对一个产品等级结构,而抽象工厂模式是针对多个产品等级结构,在只有一个产品族的情况下,抽象工厂模式实际上退化到工厂方法模式。


抽象工厂模式的优点

抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。


抽象工厂模式的缺点

产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。


适用场景

       当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。假如各个等级结构中的实现类之间不存在关联或约 束,则使用多个独立的工厂来对产品进行创建,则更合适一点。


总结

无论是简单工厂模式,工厂方法模式,还是抽象工厂模式,他们都属于工厂模式,在形式和特点上也是极为相似的,他们的最终目的都是为了解耦。在使用时,我们不必去在意这个模式到底工厂方法模式还是抽象工厂模式,因为他们之间的演变常常是令人琢磨不透的。经常你会发现,明明使用的工厂方法模式,当新需求来临, 稍加修改,加入了一个新方法后,由于类中的产品构成了不同等级结构中的产品族,它就变成抽象工厂模式了;而对于抽象工厂模式,当减少一个方法使的提供的产品不再构成产品族之后,它就演变成了工厂方法模式。


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

创建型设计模式之抽象工厂(Abstract Factory)模式 的相关文章

  • 抽象工厂模式

    工厂模式 工厂方法模式 xff08 Fatory Method Pattern xff09 提供一个接口 xff0c 一个可创建一系列相关对象的 无需指定他们的具体类 一个抽象工厂类 xff0c 不同的具体工厂产生不同的对象实体 eg 冰箱
  • 设计模式详解:抽象工厂模式

    今天我们来看一下另一个使用频率非常高的抽象工厂模式 xff0c 看完原理分别给出 NET和JAVA两种语言的实现源码 定义 xff1a 抽象工厂模式 xff1a 提供一个 创建一系列相关或相互依赖对象的接口 xff0c 而无须指定它们具体的
  • 抽象工厂模式(C++)

    define win 0 define mac 1 include lt iostream gt using namespace std class button public button virtual button virtual v
  • 抽象工厂模式

    抽象工厂模式针对的是对产品族 xff0c 而不是产品等级结构 产品族 xff1a 同一厂商生产的产品 产品等级 xff1a 同一产品 xff0c 不同厂商的产品 比如水果类里面由苹果和香蕉 xff0c 水果就是产品族 xff0c 苹果香蕉就
  • [C++]抽象工厂模式

    抽象工厂模式 Abstract Factory Pattern 是围绕一个超级工厂创建其他工厂 该超级工厂又称为其他工厂的工厂 这种类型的设计模式属于创建型模式 它提供了一种创建对象的最佳方式 在抽象工厂模式中 接口是负责创建一个相关对象的
  • 工厂模式(分简单工厂模式、工厂方法模式、抽象工厂模式)

    1 工厂模式概述 1 1 简单工厂模式 简单工厂模式是一种创建型设计模式 它实现了创建对象的功能 但不使用任何具体类的名称 客户端通过调用工厂类的静态方法来创建一个具体的对象 无需关心对象创建的细节 1 2 工厂方法模式 工厂方法模式是一种
  • java设计模式之抽象工厂模式

    什么是抽象工厂设计模式 抽象工厂模式是一种创建型设计模式 它提供了一种创建一系列相关或依赖对象的方法 而无需指定它们具体的类 抽象工厂模式是工厂方法模式的扩展 它使用一组相关的工厂来创建对象 而工厂方法模式只是使用一个单一的工厂 在抽象工厂
  • 设计模式精讲-抽象工厂方法模式

    设计模式 抽象工厂方法模式 定义 示例 应用场景 优点 定义 提供一个创建一系列相关或互相依赖对象的接口 而无需指定它们具体的类 定义和图不理解的 可以先看下面的示例 回头再去理解 示例 以数据库为例 1 变化的部分 Mysq Oracle
  • java设计模式【抽象工厂模式】

    文章目录 java设计模式 抽象工厂模式 优缺点 使用场景 具体实现 定义抽象工厂 具体工厂 定义抽象产品 具体产品 客户端调用 工厂方法模式和抽象工厂模式区别 补充说明 java设计模式 抽象工厂模式 抽象工厂模式 抽象工厂模式是对简单工
  • 2022-15-Java 设计模式-抽象工厂模式

    在工厂方法模式中 我们使用一个工厂创建一个产品 一个具体工厂对应一个具体产品 但有时候我们需要一个工厂能够提供多个产品对象 而不是单一的对象 这个时候我们就需要使用抽象工厂模式 在介绍抽象工厂模式前 我们先厘清两个概念 产品等级结构 产品等
  • Java与设计模式(3):抽象工厂模式

    一 定义 抽象工厂模式是一种创建型设计模式 它提供了一种将相关对象组合在一起创建的方式 而无需指定它们的具体类 在抽象工厂模式中 有一个抽象工厂接口 该接口定义了一组创建相关对象的方法 每个具体的工厂类都实现了这个接口 并负责创建一组相关的
  • 简单工厂模式(静态工厂方法模式)

    概述 简单工厂模式专门定义一个类来负责创建其他类的实例 被创建的实例通常都具有共同的父类 不是23种模式中的一种 是一种编码习惯 优点 1 工厂类含有必要的判断逻辑 可以决定在什么时候创建哪一个产品类的实例 客户端可以免除直接创建产品对象的
  • 设计模式--工厂模式--抽象工厂模式

    工厂模式属于创建型模式基本原理 使用一个工厂类统一生产各种产品 主要流程 1 创建产品的基类 便于统一返回创建的产品 2 创建各种产品 继承基类 注意多态 3 创建工厂类 对每种产品进行区分创建 4 在使用时要先实例化工厂类 在调用期内生产
  • 创建型设计模式之抽象工厂(Abstract Factory)模式

    定义 为创建一组相关或相互依赖的对象提供一个接口 而且无需指定他们的具体类 用意 客户端在不必指定产品的具体类型情况下 创建多个产品族中某个产品对象 定义图 参与者 抽象工厂 Creator 工厂方法核心 由一个接口或抽象类实现 具体工厂类
  • 设计模式---抽象工厂(AbstractFactory)模式

    1 名词解释 产品等级 指产品的类型一样 品牌不一样 例如空调是一种产品类型 美的空调与格力空调是不同的品牌 产品族 同一个品牌的不同产品 例如美的的空调 电饭锅 热水器属于同一产品族 这里引用一个图片来具体说明这两个名词解释 来自引用2
  • java设计模式——抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式产生的动机 为了更清晰地理解工厂方法模式 需要先引入两个概念 产品等级结构 产品等级结构即产品的继承结构 如一个抽象类是电视机 其子类有海尔电视机 海信电视机 TCL电视机 则抽象电视机与具体品牌的电视机之间构成了一个产品等级结
  • 2.Java设计模式-----抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式 Abstract Factory 是23种设计模式之一 抽象工厂模式是这样子定义的 抽象工厂模式 提供一个创建一系列相关或互相依赖对象的接口 而无需指定它们具体的类 在学习抽象工厂模式之前 最好熟悉简单工厂模式以及工厂方法模式
  • Gof23设计模式之工厂方法模式和抽象工厂模式

    在java中 万物皆对象 这些对象都需要创建 如果创建的时候直接new该对象 就会对该对象耦合严重 假如我们要更换对象 所有new对象的地方都需要修改一遍 这显然违背了软件设计的开闭原则 如果我们使用工厂来生产对象 我们就只和工厂打交道就可
  • C++设计模式之抽象工厂模式

    之前讲到了C 设计模式 工厂方法模式 我们可能会想到 后期产品会越来越多了 建立的工厂也会越来越多 工厂进行了增长 工厂变的凌乱而难于管理 而且由于工厂方法模式创建的对象都是继承于Product的 所以工厂方法模式中 每个工厂只能创建同一产
  • C++抽象工厂模式:Abstract Factory Pattern

    抽象工厂模式是工厂方法模式的升级版本 工厂方法模式只有一个抽象产品类 而抽象工厂模式有多个 工厂方法模式的具体工厂类只能创建一个具体产品类的实例 而抽象工厂模式可以创建多个 案例 在上一章节工厂方法模式的基础上 将披萨的各种原料生产抽象成一

随机推荐

  • mysql 连接池断开后自动连接

    MySQL对所有连接的有效时间默认为28800秒 正好8小时 也就是说 如果一个连接8小时没有请求和操作 就会自动断开 但是对于 Hibernate来说 它的连接池并不知道它所管理的连接中是否有被MySQL断开的 如果一个程序要使用数据库连
  • 实时数仓之实际落地如何选型和构建

    往期类似文章 实时数仓之 Kappa 架构与 Lambda 架构 奔跑者 辉的博客 CSDN博客 企业级 实时数仓架构图 奔跑者 辉的博客 CSDN博客 第一部分 Spark基础篇 奔跑者 辉的博客 CSDN博客 第一部分 Flink基础篇
  • 找不到msvcp120dll,无法继续执行代码的修复方法

    本教程操作系统 Windows系统 msvcp120 dll是电脑文件中的dll文件 动态链接库文件 如果计算机中丢失了某个dll文件 可能会导致某些软件和游戏等程序无法正常启动运行 并且导致电脑系统弹窗报错 msvcp120 dll文件丢
  • 32 --> 详解 OpenWRT系统框架基础软件模块之netifd

    一 简介 OpenWrt路由操作系统的框架基础软件有很多 大部分是通用的软件模块 如 dhcp dnsmasq iproute cmwp vpn ipsec等等 OpenWrt还集成部分具有专属特征软件模块 也是OpenWRT系统核心框架软
  • 【云原生】k8s之Ingress

    内容预知 1 Ingress的相关知识 1 1 Ingress的简介 1 2 Ingress 的组成 1 3 Ingress Nginx的工作原理 1 4 新生代Ingress controller Traefik Ingress ngin
  • 代码随想录算法训练营第十九天

    代码随想录算法训练营第十九天 一 654 最大二叉树 这题跟构造二叉树的题目一样 比较简单 class Solution private TreeNode traversal vector
  • 什么时候触发MinorGC?什么时候触发FullGC?

    触发MinorGC Young GC 虚拟机在进行minorGC之前会判断老年代最大的可用连续空间是否大于新生代的所有对象总空间 1 如果大于的话 直接执行minorGC 2 如果小于 判断是否开启HandlerPromotionFailu
  • chatgpt赋能python:Python安装Numpy库详细教程

    Python安装Numpy库详细教程 Python是一种高水平语言 当我们需要处理数值计算和科学计算时 通常需要使用Numpy库 Numpy库可以使Python在处理数组时变得更加便利 本文将会详细介绍如何在Python中安装Numpy库
  • 前端好用工具推荐-获取页面区块坐标

    最近分析网页的区块的逻辑关系和区块的坐标 找了一下相关的画图工具和插件 最后发现还是chrome牛叉 工具多 插件也多 而且非常方便好用 其中一个插件叫做 FE助手 能够方便的确定页面位置的坐标 而且使用起来相当方便 除此之外还有很多页面代
  • Stream流的使用

    目录 流介绍 流的生成 流的操作类型 流的使用 中间操作 终端操作 流介绍 流是从支持数据处理操作的源生成的元素序列 源可以是数组 文件 集合 函数 流的目的不在于保存数据 而是计算 流的生成 通常有5种方式 1 通过集合生成 List
  • 李宏毅老师机器学习选择题解析

    机器学习选择题解析加整理 项目说明 本项目是李宏毅老师在飞桨授权课程的配套问题 课程 传送门 该项目AiStudio项目 传送门 仅供学习参考 三岁出品必是精品 整理内容源于李宏毅老师机器学习课程群提问答疑解析内容 单选题 一 机器学习训练
  • nginx 禁止浏览器(www.xxxxx.com.cn/test/)访问目录,允许本地去访问目录和目录中文件

    location test return 404 解释 location 匹配浏览器的域名 区分大小写 test 域名后面跟着的目录名称 可以换成别的 return 404 也可以把 deny all 改换成 return 404 这样将返
  • TensorFlow安装使用问题集锦(不定期更新)

    记录TF安装使用过程中出现的bug进行记录与解决 1 SystemError Sonnet requires tensorflow probability minimum version 0 4 0 to be installed If u
  • 程序开发过程中的传值问题

    一 传参方式 单个值 二 传参方式 url传递多个值 用 三 传参方式 1 url传数组 2 url传多个参数 需要用 分号分割 3 案例 A页面向B页面传值几个步骤 1 先在A页面写单选提交事件传值 2 在传入页面B页面的onload里面
  • 高速下载百度网盘资料(Tampermonkey+百度网盘直链下载助手+xdown)

    下载百度网盘中的游戏 电影等文件时 由于百度自身对下载速度的限制 非VIP用户总是无法全速下载 下载速度一般在100KB s左右 如果短时间内下载文件 gt 10G还会有更严苛的下载速度限制 一般在50KB s 一周后解除限速 一旦我们想下
  • Unity5.x Animator之RootMotion

    Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系 Unity3D 的 Mecanim 动画系统可以直接复用 3DS MAX 中制作的动画文件中的位移 这个就是通过 applyRootMotion 来达成
  • UnityNative Plugin 导出时遇到的坑

    必须要在链接的输入里面添加模块定义文件 文件大概是这样 就是为了阻止名称混淆 否则UnityPluginLoad UnityPluginUnload这两个函数无法自动被Unity加载 file used by Visual Studio p
  • 死磕 java同步系列之JMM(Java Memory Model)

    简介 Java内存模型是在硬件内存模型上的更高层的抽象 它屏蔽了各种硬件和操作系统访问的差异性 保证了Java程序在各种平台下对内存的访问都能达到一致的效果 硬件内存模型 在正式讲解Java的内存模型之前 我们有必要先了解一下硬件层面的一些
  • Linux中三种引号(单引号、双引号、反引号)的区别

    1 双引号 保护特殊元字符和通配符不被shell解析 但是允许变量和命令的解析 以及转义符的解析 2 单引号 单引号内不允许任何变量 元字符 通配符 转义符被shell解析 均被原样输出 使用双引号或反斜杠转义可显示输出单引号 但是双引号和
  • 创建型设计模式之抽象工厂(Abstract Factory)模式

    定义 为创建一组相关或相互依赖的对象提供一个接口 而且无需指定他们的具体类 用意 客户端在不必指定产品的具体类型情况下 创建多个产品族中某个产品对象 定义图 参与者 抽象工厂 Creator 工厂方法核心 由一个接口或抽象类实现 具体工厂类