Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >7.设计模式--抽象工厂模式(AbstractFactory模式)

7.设计模式--抽象工厂模式(AbstractFactory模式)

作者头像
大猫的Java笔记
发布于 2021-09-29 07:47:00
发布于 2021-09-29 07:47:00
5980
举报
文章被收录于专栏:大猫的Java笔记大猫的Java笔记

1.定义

抽象工厂模式也是一种创建型模型,是对工厂的一种抽象,可以理解为生产工厂的工厂。不但工厂是抽象的,产品是抽象的,而且有多个产品需要创建,因此,这个抽象工厂会对应到多个实际工厂,每个实际工厂负责创建多个实际产品。

例如手机和电脑都是通过工厂进行生产的,同时手机和电脑可能属于不同的工厂,但可能是同一个品牌;小米手机和小米电脑属于同一品牌,而华为手机和电脑也属于同一品牌,但是却存在两个维度。

1,产品维度,无论小米手机还是华为手机都属于手机,无论小米电脑还是华为电脑都属于电脑。

2.公司维度,小米手机和小米电脑属于小米公司,而华为手机和华为电脑都属于华为公司。

2.抽象工厂结构图

其中Factory扮演工厂的抽象角色,而Factory1和Fatcory2是具体的工厂角色负责生产。同时ProductA扮演产品的抽象角色,而ProductA1、ProductA2则扮演的是具体的产品角色,是被具体的工厂进行生产的。

3.抽象工厂代码实现

ProductFactory就是工厂的抽象角色,他并不知道产品该怎么被生产,所以只是规定了能够生产哪些产品,比如电脑产品和手机产品。

有了工厂我们需要产品,毕竟工厂要负责生产产品,我们有两个产品分别是手机和电脑,但是他们只是一个抽象的产品,只是定义了自己所能拥有的功能。

产品只是定义了抽象的行为,是需要具体的产品进行完善的,比如小米手机和小米电脑以及华为手机和华为电脑,从产品来说手机都属于抽象手机的具体产品,电脑都属于抽象电脑产品的具体产品。所以手机都应该实现PhoneProduct而电脑都应该实现ComputerProduct。

现在有了具体的产品,但是产品是需要被工厂所生产的吧,而同一个品牌应该被同一个工厂所生产,小米的手机和电脑都应该被小米工厂生产,而华为的手机和电脑都应该被华为工厂生产。只是他们可能不在一个流水线,实际上在同一品牌应该都是同一个工厂。

所以XiaoMiFatcory和HuaWeiFatcory就是不同产品的工厂,他们是工厂抽象的具体实现,所以应该实现ProdyctFactory。同时需要对电脑和手机进行不同的生产,所以创建了不同的产品。

下面进行测试,我们生产一个华为电脑进行开机和打游戏,然后生产一个小米手机开机和打电话。可以看到实际上我们使用华为工厂进行了华为的电脑生产,用小米的工厂生产了小米手机。但是他们并不是同一个工厂,且从产品维度属于同一个产品,从同一个品牌维度又属于同一个品牌。

抽象工厂模式优缺点:

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

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

小结:抽象工厂模式是为了让创建工厂和一组产品与使用相分离,并可以随时切换到另一个工厂以及另一组产品;抽象工厂模式实现的关键点是定义工厂接口和产品接口,但如何实现工厂与产品本身需要留给具体的子类实现,客户端只和抽象工厂与抽象产品打交。本文参考B站《狂神说》以及廖雪峰的官网

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大猫的Java笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一起学习设计模式--04.抽象工厂模式
在工厂方法模式中通过引入工厂等级结构,解决了简单工厂模式中工厂类职责过重的问题。但是由于工厂方法模式中每个工厂只生产一类产品,这样可能会导致系统中存在大量的工厂类,势必会增加系统的开销。
独立观察员
2022/12/06
4410
一起学习设计模式--04.抽象工厂模式
面向对象设计的设计模式(三):抽象工厂模式
有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。比如系统中有多于一个的产品族,而每次只使用其中某一产品族,属于同一个产品族的产品将在一起使用。
用户2932962
2019/01/07
1K0
设计模式3之抽象工厂模式
然而现实生活中有很多综合型的工厂,比如有些电视工厂不仅生产电视机,还会生产与之配套的机顶盒。
Lvshen
2022/05/05
2530
设计模式3之抽象工厂模式
设计模式:抽象工厂模式
抽象工厂(Abstract Factory)模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
王强
2018/08/09
3370
设计模式:抽象工厂模式
【地铁上的设计模式】--创建型模式:抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一种方式来封装一组相关或相互依赖的对象的创建过程。抽象工厂模式将具体产品的创建与客户端代码分离开来,通过引入抽象工厂和抽象产品来实现对象的解耦和隐藏。抽象工厂负责定义一组用于创建一系列产品对象的方法,每个方法对应一个具体产品族的创建过程。具体工厂类实现抽象工厂接口,负责创建具体产品对象,并且每个具体工厂类只能创建一种具体产品族的对象。 抽象工厂模式涉及到四个角色:抽象产品、具体产品、抽象工厂和具体工厂。其中,抽象产品定义产品的接口规范,具体产品实现抽象产品的接口规范,抽象工厂定义工厂的接口规范,具体工厂实现抽象工厂的接口规范并负责具体产品的创建。 与工厂方法模式相比,抽象工厂模式的抽象程度更高,因为它不仅能够封装具体产品的创建过程,还能够封装具体产品族的创建过程。在使用抽象工厂模式时,客户端只需要关注抽象工厂和抽象产品,而不需要关注具体的实现细节。 抽象工厂模式适用于需要创建一组相关或相互依赖的对象的场景,例如需要创建一个由多个组成部分的复杂对象或者需要创建一组具有相同风格或主题的界面控件。抽象工厂模式可以保证产品的一致性和相互依赖性,同时还可以提供高度的灵活性和可扩展性,因为只需要增加新的具体产品类和对应的具体工厂类即可实现系统的扩展。
喵叔
2023/04/28
2140
和 lvgo 一起学设计模式(三)创建型之抽象工厂模式
特别强调了一下抽象工厂模式的概念理解部分我觉得是非常有必要的,当然我在写下这篇文章之前看过很多优秀的博文、书籍、视频等资料对抽象工厂模式的讲解和代码示例等内容,但我发现。抽象工厂的概念被一次又一次的刷新,所以我也想表达一下自己对抽象工厂的理解。如果你和我持不同的意见,可以继续往下看,我很愿意和你一起讨论这个问题。
星尘的一个朋友
2020/11/25
3650
和 lvgo 一起学设计模式(三)创建型之抽象工厂模式
[设计模式]抽象工厂模式
根据文章内容撰写该文的摘要总结
静默虚空
2018/01/05
6210
[设计模式]抽象工厂模式
设计模式(三):抽象工厂模式
设计模式(三):抽象工厂模式
Java架构师必看
2021/05/14
2780
设计模式 - 抽象工厂模式
在工厂模式中,每一个工厂负责生产对应的一款具体的产品,具有唯一性。但有时候,人们还需要一个工厂能够提供多个产品对象。
子乾建建-Jeff
2020/06/29
3880
设计模式 - 抽象工厂模式
【Java设计模式】009-抽象工厂模式
简单讲:抽象工厂定义创建的多个产品,具体工厂负责创建,每个具体工厂负责一个品牌的产品的创建,使用者根据具体工厂和产品名称获得产品;
訾博ZiBo
2025/01/06
1110
抽象工厂模式 创建型 设计模式(四)
所有的ConcreteCreator的返回类型都是Product,因为抽象工厂角色Creator就是返回Product 
noteless
2018/12/12
4460
设计模式---工厂模式
简单工厂模式属于类的创新型模式,又叫静态工厂方法模式,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
大忽悠爱学习
2021/11/15
3730
设计模式----抽象工厂模式
上一篇----工厂方法模式 抽象工厂模式: 提供一个接口,用来创建相关或依赖对象的家族,而不需要明确指定具体类。 抽象工厂模式是工厂方法模式的升级版本。如果我们要实现的系统有N个产品族,每个产品族有M种产品,那么就可以使用抽象工厂模式。抽象工厂模式的结构可以分为: 抽象产品类/接口:定义每个产品族的共性特点,有多少个产品族就要定义多少个抽象产品类/接口。 产品实现类:每个具体产品肯定属于某个产品族,它要继承/实现相应的抽象产品类/接口。 抽象工厂类/接口:声明每个产品族的创建方法,有N个产品族,在抽象工厂类
SuperHeroes
2018/05/30
4680
设计模式学习笔记之工厂模式
这是一篇学习笔记,内容很多是来源于网上的资料,然后按照自己学习情况进行的总结,有些是自身的感受,有些是网上比较好的资料的引用。 我的个人博客:海加尔金鹰
海加尔金鹰
2020/06/09
3670
设计模式(二、三):创建型之工厂方法模式和抽象工厂模式
冬天vs不冷
2025/01/21
1440
设计模式(二、三):创建型之工厂方法模式和抽象工厂模式
设计模式之抽象工厂模式
抽象工厂模式(Abstract Factory)是一种创建型设计模式,提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。该模式的主要角色包括抽象工厂、具体工厂、抽象产品和具体产品。抽象工厂声明创建产品的方法,具体工厂实现这些方法生成具体的产品实例。抽象产品定义产品的接口,具体产品实现这些接口。此模式适用于需要创建一系列相关对象且系统需要独立于这些对象的创建和表示的场景。在实际应用中,抽象工厂模式可以用于跨平台UI组件库的设计,确保不同平台的UI组件风格一致。例如,通过不同的具体工厂创建
九转成圣
2024/06/03
2560
设计模式—— 九 :抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种比较常用的模式,其定义如下:
三分恶
2020/07/16
3160
【设计模式】抽象工厂模式
前面介绍的 工厂模式 中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。
Li_XiaoJin
2022/06/10
2610
【设计模式】抽象工厂模式
go设计模式之抽象工厂模式
工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产
melodyshu
2024/04/26
1351
简单工厂模式、工厂方法模式、抽象工厂模式
若添加新产品,则新增具体产品3类和具体工厂3类就可以,将客户端new 产品1工厂替换成产品3工厂就可以,符合开闭原则。
冬天vs不冷
2025/01/20
1300
推荐阅读
相关推荐
一起学习设计模式--04.抽象工厂模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档