抽象工厂模式设计模式

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

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

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

问题陈述:

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

解:

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

结构体:

抽象工厂设计模式

在上图中,创建的其他项是通过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. JAVA工厂模式优缺点_简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

    各位小伙伴好,今天给大家主要介绍一下简单工厂模式.工厂模式和抽象工厂模式的区别及各自的优缺点. (本文实现语言为Python3) [前言] 众所周知今天所讲的内容是 设计模式的一类:对于设计模式这个概 ...

  2. java 工厂模式优点_抽象工厂模式的优缺点和适用场景

    抽象工厂模式的优点 抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束.所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系 ...

  3. java 工厂模式 计算器_简单工厂模式实现简易计算器

    packageFactoryMethodPattern;/*创建人:czc 创建时间:2019/12/16 创建用途:简单工厂模式实现计算器--主界面*/ import javax.swing.*;i ...

  4. 抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...

    在工厂方法模式中,工厂只负责生产具体的产品,每一个具体的工厂对应着一个具体的产品,工厂方法也具有唯一性,如果有时候我们需要一个工厂方法提供多个产品而不是一个单一的产品,例如:海尔品牌不止生产海尔TV, ...

  5. python工厂模式 理解_浅谈Python设计模式 - 抽象工厂模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...

  6. 设计模式学习笔记(三)工厂模式中的简单工厂、工厂方法和抽象工厂模式之间的区别

    设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory).工厂方法(Factory Method ...

  7. android 工厂模式创建,7、Android设计模式---(创建型设计模式)抽象工厂模式

    一.介绍,定义 抽象工厂模式也是创建型模式之一,抽象工厂模式起源于对不同操作系统的图形化解决方案,如不同操作系统的按钮和文本框控件及其实现. 为创建一组相关或者相互依赖的对象提供接口,而不需要具体指定 ...

  8. JavaScript 前端简单工厂模式、工厂方法模式、抽象工厂模式优缺点及详解 — 设计模式《二》

    工厂模式 前言:就前端 JavaScript 语言来说,可以把简单工厂模式.工厂方法模式.抽象工厂模式归纳为一种即工厂模式: 一. 简单工厂模式 介绍/概述: 简单工厂模式的工厂类一般是使用静态方法, ...

  9. 设计模式_简单工厂模式(Simple Factory)

    开闭原则(OCP) 1 什么是开闭原则 一个软件实体应该对扩展开放,对修改关闭.这个原则是说,在设计一个模块的时候,可以在不修改的前提下被扩展. 2 怎样做到开闭原则 2.1.抽象化是关键 在java ...

  10. 趣谈设计模式 | 工厂模式(Factory):利用工厂来创建对象

    文章目录 案例:外设店铺 简单工厂 工厂方法 抽象工厂 总结 要点 三类工厂模式的特点 三种工厂模式的适用场景 完整代码与文档 工厂模式模式是创建型模式中较为常用的一个,它并不是一个模式,而是三种功能 ...

最新文章

  1. 二十七、连续分配管理方式
  2. “深度学习不能拿来乱用”,Nature论文引发激烈争论
  3. 在Windows Mobile和Wince(Windows Embedded CE)下如何使用.NET Compact Framework开发进程管理程序...
  4. ICC_lab总结——ICC_lab6:版图完成
  5. 各个层次的gcc警告
  6. 《Python Cookbook 3rd》笔记(2.20):字节字符串上的字符串操作
  7. VSCode 汉化、设置为 中文语言显示 、中文界面
  8. 一句话证明你是产品经理
  9. 1.5编程基础之循环控制 21 角谷猜想
  10. vcneter5.5添加域用户权限
  11. Python数据结构与算法笔记(二):递归介绍及汉诺塔问题
  12. android listview item 选中背景,Android ListView的item背景色设置和item点击无响应的解决方法...
  13. vs 2005應用2003框架
  14. 备份 虚拟机安装centos8 并配置部分开发环境(不用docker)
  15. 最大的PHP开源网店系统ECShop简介
  16. 设置C++缺省源的方法(DEV C++)
  17. 滴滴如何调度_滴滴智能调度浅析
  18. Windows安装--cerebro
  19. 21世纪新诞生的NBPL--语言与它的奠基人——SulluBouth.M.G博士
  20. Unity官方案例噩梦射手开发总结<一> 角色的攻击功能实现

热门文章

  1. MySQL cast()函数
  2. MySQL coalesce()函数
  3. 跳跃表(Skip list)原理与java实现
  4. java之String
  5. JavaFX之TableView的MenuButton
  6. 【Css】基础属性(一)
  7. Bladex生成Swagger的方法
  8. jsp中使用cookie时报错……
  9. SpringBoot整合Shiro实现登录认证和授权CHCache
  10. 乱码问题产生的原因与解决方案---UTF-8