设计模式概述之抽象工厂模式(三)

news2025/1/18 7:25:52

上次咱们说了工厂方法模式,不知道各位同学掌握了没有。今天咱们说说“抽象工厂模式”。

抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。

要想彻底了解抽象工厂模式,必须要考虑的是“抽象工厂模式”与“工厂方法模式”的区别,其实从字面上看,就是一个“抽象”的区别。

在工厂方法模式中,我们在“女娲造人”的示例说明中,工厂方法里“造”的“产品”只有人类,无论男人和女人,都是人。而抽象工厂的主要意义在于,将工厂升级为2.0版本,变成啥都能造。也就是说,可以造很多类型,不仅仅是人类。“女娲造万物”就可以体现出来。

 

产品1:女娲造人,分男人和女人。

 产品2:女娲造宠物,分雄性和雌性。

产品中不仅仅一种类的产品,除了“造人”还有产品“宠物”,女娲还要“造宠物”

当我们有多个产品类型需要制造成对象的时候,就可以采用抽象工厂模式了。

当工厂升级之后,每个工厂方法都有所升级,可以具体造出对应类型的产品。

 抽象工厂在应用的时候,重点还是代码结构上的灵活性、扩展性的应用:

注意:两个产品类型中,有共同的特点。人分男女,宠物分雌雄。


模式的结构与实现

抽象工厂模式同工厂方法模式一样,也是由抽象工厂、具体工厂、抽象产品和具体产品等 4 个要素构成,但抽象工厂中方法个数不同,抽象产品的个数也不同。现在我们来分析其基本结构和实现方法。

1.模式的结构 抽象工厂模式的主要角色如下。

•抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。

•具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。

•抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。

•具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。

优缺点

优点:抽象工厂模式除了具有工厂方法模式的优点外,其他主要优点如下。

可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。

•当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组。

•抽象工厂增强了程序的可扩展性,当增加一个新的产品族时,不需要修改原代码,满足开闭原则。

缺点:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度。


以上就是今日分享,如果你觉得有用,记得点赞评论哦,以防找不到我!

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

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

相关文章

计算机网络——CSMA-CA协议

CSMA-CD协议是对碰撞的检测,CSMA-CA协议是对碰撞的避免 CSMA-CD和CSMA-CA应用场景不一样,CSMA-CA协议主要用于无线局域网,CSMA-CD应用与总线式以太网。 无线局域网用CSMA-CD协议无法做到360检测碰撞 隐蔽站:A和C都检测不到信号&am…

Oracle---视图

Oracle之视图和物化视图 文章目录Oracle之视图和物化视图视图优点创建视图带检查约束视图只读视图创建带错误的视图删除视图查询视图物化视图(实体化视图)区别和优点创建物化视图创建手动刷新的物化视图执行下列语句刷新创建自动刷新的物化视图创建时不生…

Java日志框架简介

一、java日志发展线路图 上面涵盖了java世界里主要的日志框架或门面 二、日志门面和框架的区别 日志框架技术 JUL、Logback、Log4j、Log4j2 用来方便有效地记录日志信息 日志门面技术 JCL、SLF4j 为什么要使用日志门面技术: 每一种日志框架都有自己单独的API&am…

[附源码]Python计算机毕业设计高校学生管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等…

自学一个月pyhon找到工作,半年成为多个平台关注破万的小作者

前言 干货来了,浓缩了我学习python的所有学习经历,从中获取到的经验分享给你,如果你看了没用,那让我打你一拳。 大学 高中的我,考了三次高考才勉强考上一个二本大学一本数学专业,你没听错,三…

基于C语言实现(控制台)学生成绩管理系统【100010051】

学生成绩管理系统 说明: 注册密码:2014052421程序包含中文和特殊字符,在 Window 下需 ASCII 编码,不能 UTF-8 编码。程序对三个文件要求是文本文件,且 studata.txt 中包含中文字符,在 window 下也需要 AS…

全网惟一面向软件测试人员的Python基础教程-在Python中如何优雅的切西瓜呢?

全网惟一面向软件测试人员的Python基础教程 起点:《python软件测试实战宝典》介绍 第一章 为什么软件测试人员要学习Python 第二章 学Python之前要搞懂的道理 第三章 你知道Python代码是怎样运行的吗? 第四章 Python数据类型中有那些故事呢?…

第03讲:Security之用户鉴权

一、创建项目 参考:浅试Security 二、实现用户鉴权 何为鉴权?说白了其实就是用户认证,用户输入用户名和密码,只有认证通过了才能使用我的系统。 在实际的项目开发中,账号和密码都是从数据库中查询出来的。所…

820爆炸案(模拟案件)

文章目录模拟案件背景相关密码快压word邮箱BitLocker系统证书bestcrypt涉案图片模拟案件背景 8月20日18:00某市汽车站发生一起爆炸案件,经初步侦查,炸弹系通过手机远程引爆,办案人员经过综合研判分析,确定了引爆炸弹的…

在Mac电脑上怎么修改移动硬盘的读写权限?怎样修改mac电脑中移动硬盘的权限

在Mac电脑上怎么修改移动硬盘的读写权限?你是否遇到过把外部硬盘连接到Mac电脑后,外部硬盘只能读取不能写入的问题?大部分的情况是因为硬盘格式可能是Windows系统的格式,导致在mac电脑上只能读取不能写入。那我们要怎么才能正常的…

腾讯T3-3级资深架构师呕心整理:10万字节springboot教程全解!

前言: 可以毫不夸张地说,这篇文章介绍的 SpringBoot 教程基本已经涵盖你工作中遇到的大部分常用的场景。对于每一个springboot的用法,文中都会都会有详细的教程解释。 本文总共从29个章节,248页PDF,阐述springboot在各种环境下的…

计算机毕设Python+Vue校园心理咨询平台(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Servlet应用(Request+response对象)

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者…

测试架构师需要具备哪些能力?

目录 前言 为什么软件项目需要架构设计? 测试架构师需要解决什么问题? 测试架构师需要具备哪些能力? 测试工程师如何培养架构能力? 总结 重点:配套学习资料和视频教学 前言 相比于我们常见的研发架构师&#x…

微信机器人的构建与使用

一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion:2022.12.15 Last edited: 2022.12.15 目录 《微信机器人》程序使用说明 微信机器人使用说明 1.项目说明 2. 系统环境 3.准备条…

Java+MySQL基于SSH的扶贫信息管理系统 开题 毕业设计

扶贫信息管理系统采用了B/S(浏览器/服务器)体系结构,JAVA作为开发语言,MySQL作为数据存储进行开发,Tomcat作为WEB服务器,开发平台windows,开发工具采用比elicpse更好用的myeclipse。系统角色分为用户和管理员,主要模块有:县管理模块、贫困户管理模块、扶贫文件管理模…

B站试用期刚过,被HR和大老板一起谈话,说我工作没任何问题,但今晚必须走人!...

最近B站的裁员消息大家关注了吗?一位B站的新员工哭诉:试用期刚过,就被HR和大老板一起谈话,说他工作态度、工作能力、工作产出都没有任何问题,但必须在12.16号走人!他不接受,争辩了很久&#xff…

鉴源论坛 · 观模丨AUTOSAR调度表可调度性的形式化分析

作者 | 郭建 上海控安可信软件创新研究院特聘专家 版块 | 鉴源论坛 观模 汽车上大量软件和电子控制单元(ECU,Electronic Control Unit)的使用导致了汽车电子架构变得更为复杂,现如今从工厂生产的汽车更像是带轮子的电脑。现代汽车由大约50到…

Java+MySQL基于ssm的物理竞赛管理系统 开题 论文

物理竞赛是对课堂上所学的理论知识的实践运用,加深所学知识的理解,锻炼团队协作能力。学生可以根据个人爱好,个人特长选择参与,不仅能培养学生的创新意思、提高专业技能,还能锻炼学生的组织能力和协作能力。物理竞赛是在中国科协的领导下,由中国物理学会主办,各省、自治区、直辖…

windows11-IIS和nginx部署 vue3项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 IIS部署vue3项目一、IIS 安装二、解决404问题三、windows环境下安装/使用 nginx提示:以下是本篇文章正文内容,下面案例可供参考 一、IIS 安装 https…