抽象工厂设计模式是工厂设计模式的另一种形式。 这种模式可以被视为“超级工厂”或“工厂工厂”。

抽象工厂设计模式(属于“四人帮”的一部分)属于“创新设计模式”类别,它提供了一种封装一组具有公共链接的工厂的方法,而无需突出其具体类。 这就是工厂根据用户需求在运行时创建各种对象的全部内容。 客户仍然完全不知道(解耦)了从各个工厂获得的具体产品,客户只能访问简化的界面。

定义:
抽象工厂设计模式提供了一个接口,用于创建相关或相关对象的族,而无需指定其具体类。

问题陈述:

我们将考虑与服装工厂相同的先前示例,并对其进行扩展以理解抽象工厂的问题陈述。 考虑一家专门生产裤子和衬衫的服装工厂。 现在,作为著名零售品牌的母公司正进入小工具领域。 他们还计划扩大其工厂,在美国建立一个中心,在英国建立另一个中心。 客户端应该完全不知道对象是如何创建的。 我们可以用来解决此要求的最佳设计模式是什么?

解:

为了解决上述设计问题,我们将使用抽象工厂模式。 如前所述,这是超级工厂。 使用工厂方法模式无法有效解决上述问题,因为这涉及与母公司或受抚养人相关的多个工厂和产品。
注意:在设计模式中,摘要和接口可以使用相同的名称来引用。

结构体:

抽象工厂设计模式

在上图中,创建的其他项是通过AbstractFactory的具有createProductA()createProductB()方法的抽象附加层。 有多个ConcreteFactories可以实现AbstractFactory的方法。 客户端现在仅访问AbstractFactory接口。

另一部分是产品。 客户端现在访问不同的AbstractProduct接口AbstractProductAAbstractProductB 。 所有用于AbstractProducts的ConcreteProducts都是由ConcreteFactories( ConcreteFactory1ConcreteFactory2 )创建的,这是逻辑。

现在,让我们看一下我们现实生活中的GarmentFactory示例,它与Factory Method模式有什么区别。

抽象工厂示例

在上面的现实示例中,RetailFactory是AbstractFactory类,该类现在在美国和英国等不同位置拥有多个Concrete工厂(UKFactory和USFactory),专门致力于分别创建衬衫/笔记本电脑和裤子/手机等多种产品。 在此示例中,我们还创建了另一个名为FactoryMaker的其他类,该类从客户端中选择Factory,然后将作业相应地委派给适当的Factory类。 客户端完全不知道该处理的完成方式,并且仅引用RetailFactory接口以及GarmentType和GadgetType接口。 这种松散的耦合也有助于增加多个混凝土产品,而无需更改客户代码。

优点:

使用此模式,即使在运行时也可以在不更改客户端代码的情况下交换具体类。

退税:

主要缺点之一是额外的复杂性和在初始阶段编写代码。

你知道吗?
JEE中的数据访问对象使用(GoF)抽象工厂模式从RdbDAOFactory,XmlDAOFactory,OdbDAOFactory创建各种产品DAO。

有趣的一点:

  • 抽象工厂,构建器和原型可以在其实现中使用Singleton。 抽象工厂模式通常与工厂方法一起使用,但是也可以使用原型模式来实现,以提高性能并简化代码。
  • 抽象工厂可以用作Façade模式的替代方案,以隐藏平台特定的类
  • AbstractFactory类仅声明用于创建产品的接口。 实际的创建是ConcreteProduct类的任务,其中一个好的方法是为该系列的每个产品应用Factory Method设计模式。

抽象工厂和工厂方法模式之间的区别:

  • Factory Method模式向客户端公开了一种用于创建对象的方法,而在Abstract Factory的情况下,它们公开了可能由这些Factory方法组成的一系列相关对象。
  • 设计始于使用工厂方法(复杂程度较低,更易于自定义的子类激增),并随着设计人员发现需要更多灵活性的地方而向抽象工厂,原型或生成器(更灵活,更复杂)发展。
  • 工厂方法模式隐藏单个对象的构造,而抽象工厂方法则隐藏一系列相关对象的构造。 抽象工厂通常使用一组工厂方法来实现。

参考: 抽象工厂设计模式在Idiotechie博客上由我们的JCG合作伙伴 Mainak Goswami 解释 。

翻译自: https://www.javacodegeeks.com/2012/10/abstract-factory-design-pattern-explained.html

抽象工厂设计模式解释相关推荐

  1. 抽象工厂模式设计模式_抽象工厂设计模式解释

    抽象工厂模式设计模式 抽象工厂设计模式是工厂设计模式的另一种形式. 这种模式可以被视为"超级工厂"或"工厂工厂". 抽象工厂设计模式(属于"四人帮&q ...

  2. 用C# (.NET Core) 实现抽象工厂设计模式

    本文的概念性内容来自深入浅出设计模式一书.上一篇文章讲了简单工厂和工厂方法设计模式 使用的是披萨店的例子. 文将继续使用这个例子, 这里要用到抽象工厂. 披萨店的需求变更 现在披萨店在各地授权了很多连 ...

  3. 抽象工厂和工厂方法示例_抽象工厂设计模式示例

    抽象工厂和工厂方法示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此 ...

  4. 抽象工厂设计模式示例

    本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原因,并了解何时以 ...

  5. 设计模式之二抽象工厂设计模式

    继上篇简单工厂设计模式之后,今天继续讲解抽象工厂设计模式.在简单工厂中,我们的工厂类一次只可以处理一类产品.那么如果我们想处理多类产品,简单工厂是满足不了的.必须要用抽象工厂设计模式. 我们先从概念上 ...

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

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

  7. java工厂模式和抽象工厂_Java中的抽象工厂设计模式

    java工厂模式和抽象工厂 Welcome to Abstract Factory Design Pattern in java example. Abstract Factory design pa ...

  8. 工厂设计模式和抽象工厂设计模式

    工厂设计模式 1.定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使得一个类的实例化延迟到子类. --<设计模式>GoF 2.代码实现 代码背景:实 ...

  9. c++的抽象工厂设计模式

    首先工厂设计模式分好多种,简单工厂设计模式,方法工厂设计模式,抽象工厂设计模式 今天主要介绍的是抽象工厂设计模式: 分析: 所谓工厂:用来生产产品:所谓抽象:将共同点提出来形成接口. 1>首先要 ...

最新文章

  1. html 如何实现一条竖线边上有 刻度_记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背||CSDN博文精选...
  2. 多线程:多线程优缺点、应用场景
  3. python 重写__repr__与__str__函数
  4. Linux中高斯分布的参数设置,华为openGauss 配置操作系统参数
  5. scrapy模拟模拟点击_模拟大流行
  6. 847. Shortest Path Visiting All Nodes(一)
  7. alv界面允许数字输入负号_在Excel中输入这些字符,我被虐哭了
  8. xftp6无法使用处理
  9. 算法:回溯十六 Add and Search Word添加并查找单词
  10. 梦幻西游qq表情包YR
  11. 论电子病历文本编辑器
  12. 到底要不要去外包公司?这篇带你全面了解外包那些坑!
  13. 淘宝差评回复模板,最新最全差评回复话术
  14. linux 加速度传感器数据获取,对加速度传感器的数据进行方向和坐标的转换
  15. B. Dubious Cyrpto
  16. 魔百盒CM201-2_YS、ZG、CH、(emmc,nand)_海思3798mv300_全套刷机固件
  17. 二叉树遍历(非递归遍历)
  18. 寻路机器人单片机程序示例_单片机典型案例开发(四)
  19. 数据湖与数据仓库的新未来:阿里提出湖仓一体架构
  20. SWOT-Analyse, um Ihr Unternehmen profitab

热门文章

  1. php while循环次数,php while循环得到循环次数
  2. ToolProvider.getSystemJavaCompiler() return null 的解决方法
  3. Makefile浅尝
  4. aws 性能_AWS上的应用程序自动扩展–选项和对性能的影响
  5. hazelcast_HazelCast的Spring-Boot和Cache抽象
  6. 代理模式和动态代理模式_代理模式介绍
  7. lambda 分类聚合_使用Java 8 Lambda,流和聚合
  8. lambda ::_Lambdas中的例外:有点混乱的优雅解决方案
  9. hazelcast入门教程_Hazelcast入门指南第3部分
  10. groovy 2.5.4_Java 7 vs Groovy 2.1性能比较