1.定义

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

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

1,产品维度,无论小米手机还是华为手机都属于手机,无论小米电脑还是华为电脑都属于电脑。
2.公司维度,小米手机和小米电脑属于小米公司,而华为手机和华为电脑都属于华为公司。

2.抽象工厂结构图

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

3.抽象工厂代码实现

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

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

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

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

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

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

抽象工厂模式优缺点:

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

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

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

7.设计模式--抽象工厂模式(AbstractFactory模式)相关推荐

  1. 设计模式--抽象工厂(Abstract Factory)模式

    模式定义 提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类 类图 应用场景 程序需要处理不同系列的相关产品,但是你不希望它依赖于这些产品的具体类时可以使用抽象工厂模式 优点 1.可以 ...

  2. 设计模式学习笔记——抽象工厂(Abstract Factory)模式

    设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...

  3. 系统架构技能之设计模式-抽象工厂模式

    一.上篇回顾 上篇我们主要讲述了简单工厂模式和工厂模式.并且分析了每种模式的应用场景和一些优缺点,我们现在来回顾一下: 简单工厂模式:一个工厂负责所有类型对象的创建,不支持无缝的新增新的类型对象的创建 ...

  4. 常见设计模式—抽象工厂模式

    设计模式-抽象工厂模式 1.什么是抽象工厂模式 抽象工厂模式是围绕一个超级工厂创建其它工厂,是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品. 2.角色分 ...

  5. 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)

    [JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...

  6. 设计模式-抽象工厂模式实例(二)

    (1)案例背景: 计算机包含内存(RAM),CPU等硬件设备 (2)实现步骤: 根据题意,使用抽象工厂模式并画出类图,类图中应包含一个抽象工厂类AbstractFactory, PcFactory和M ...

  7. 创建设计模式 - 抽象工厂设计模式

    创建设计模式 - 抽象工厂设计模式 欢迎来到java示例中的Abstract Factory Design Pattern.摘要工厂设计模式是创造模式之一.抽象工厂模式几乎类似于工厂模式,除了它更像工 ...

  8. 徒手撸设计模式-抽象工厂模式

    概念 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...

  9. 设计模式、原则、饿汉式单例模式、抽象工厂、代理模式、观察者模式、模板方法模式使用场景

    设计模式 ​ 对各种面向对象方法的一种总结.前辈们遇到了好多设计问题,然后利用面向对象解决了.然后他们把解决方案汇总起来,形成了20多种设计模式.它可以有效的帮助我们利用面向对象,来提高代码的复用性. ...

最新文章

  1. netty使用从0到1
  2. pybind11回调函数返回指针
  3. Javascript模式阅读笔记 · 简介
  4. 语言的进步与代码生成
  5. MySQL - Found option without preceding group in config file
  6. spring aop组件_安全性中的Spring AOP –通过方面控制UI组件的创建
  7. Java网络编程之NIO编程(待补充)
  8. IOT(7)---物联网平台架构设计
  9. 数组的冒泡排序快速上手
  10. ajax ashx session 为空,jquery ajax post 方式ashx文件取不到值。
  11. 厉害了!这项技术BAT力捧!程序员:我彻底慌了...
  12. linux下ssh/sftp配置和权限设置
  13. python适配器模式角色_适配器模式(Adapter模式)详解
  14. SQL Server 2008 R2 建立数据库,建立表,建立存储过程
  15. 1136 mysql_MySQL错误:Error Code: 1136
  16. 新手如果写一个软件,应该是怎么一个流程?
  17. 如何打造一个顶尖的精确营销系统?
  18. 基于Java基础的客户信息管理系统
  19. 宝宝营养粥及如何提高宝宝睡眠
  20. 秣小白的C语言旅程——第二站(含自我介绍)

热门文章

  1. springboot模板
  2. java-php-python-ssm原创网络文学管理系统计算机毕业设计
  3. 计算机传奇人物之詹姆斯.高斯林
  4. 同一文件夹下多个word文档合并
  5. word中添加续表和合并续表
  6. TTS(TextToSpeach)语音朗读实例
  7. Fabric.js 橡皮擦的用法(包含恢复功能)
  8. 简图记录-批判性思维
  9. c vscode 高亮,vscode设置代码字体颜色高亮_编程开发工具
  10. t检验、方差分析、卡方检验统计量的构造