前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >7.设计模式--抽象工厂模式(AbstractFactory模式)

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

作者头像
大猫的Java笔记
发布2021-09-29 15:47:00
5330
发布2021-09-29 15:47:00
举报
文章被收录于专栏:大猫的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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档