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

抽象工厂模式设计模式

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

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

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

问题陈述:

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

解:

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

结构体:

抽象工厂设计模式

在上图中,创建的其他项是通过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

抽象工厂模式设计模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

json php 数组读写_PHP如何将数据写入JSON?

I am newer for php. I want make php page cache, query data from mysql and store data into json format.I have many questions:which type of file should I store? .json or .txt or .cache? for I also need use json decode return datas into page.I want use cron…

加密后24位且最后两位是==

发现 某 xml 文件中的 标签 id 都是 24位大小写字母、数字加号、/等 共计 24位 且最后两位都是 测试发现用 16位数字经过base64可以得到类似的 格式 加密前:1234567890123456加密后:MTIzNDU2Nzg5MDEyMzQ1Ng 我这里的需求不是要解密,只是要模…

Java Syncrhonisers

线程通信主要通过共享对字段和对象的访问来发生。 尽管这种通信方式非常高效,但它易于出现诸如线程干扰和内存一致性之类的错误。 同步是一种有助于防止此类错误的工具。 但是,同步不是免费提供的,并且在访问当前由另一个线程持有的锁或对象…

MATLAB的VLFeat工具箱

下载地址:http://www.vlfeat.org/ 简介:VLFeat开源库实现了流行的计算机视觉算法,专门用于图像理解和局部特征提取和匹配。算法包括Fisher向量、VLAD、SIFT、MSER、k-means、分级k-means、agglomerative information bottleneck、SLIC超像素…

Phinecos(洞庭散人) 专注于开源技术的研究与应用 TinyXML:一个优秀的C++ XML解析器

读取和设置xml配置文件是最常用的操作,试用了几个C的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。 TinyXML是一个开源的解析XML的解析库,能够用于C,能…

windows聚焦壁纸不更新_Win10无法自动更换聚焦锁屏壁纸怎么办?

Win10无法自动更换聚焦锁屏壁纸怎么办?在Win10系统的默认情况下,锁屏界面设置的是Windows聚焦,如果我们使用微软账户登录,系统会自动更换锁屏壁纸,让我们每天都能看到不一样的锁屏壁纸。然而有用户发现,系统…

jdbc-------JDBCUtil类 工具类

jdbcutil 主要处理的是 连接数据库, 和关闭各个流 1, 数据库连接的配置信息: mysql.properties (在工程的目录下)个人配置 urljdbc:mysql://localhost:3306/test drivercom.mysql.jdbc.Driver usernameroot password123 2, 获取连…

1.关于python

开始时间:2018年12月6日19:13:24 python第一次接触,将学习《简明python3教程》这本书,顺便做下笔记。 ----------------------------------------------------------------------------------------------------- 1、python的特点&#xf…

mybatis 使用in 查询时报错_MyBatis(四):mybatis中使用in查询时的注意事项

packagecom.boco.jobmonitor.model;importjava.util.Date;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.Id;public classJobitem {/*** 唯一键 pk* 列名:id 类型:INTEGER(10) 允许空:false 缺省值:null*/IdGenerat…

python网络聊天器多线程版

在之前的一篇文章(python网络编程-udp)中实现了一个简单的udp聊天器,只能在单线程下进行收发数据,在学习完多线程之后,实现一个能同时收发数据的udp聊天器。 说明: 编写一个有2个线程的程序线程1用来接收数…

CentOS 7 / RHEL 7 systemd 指令

CentOS 7 已经切换到 systemd,系统指令也有所变化。之前用于启动、重启、停止各种服务的service 作为向后兼容的指令还能使用,但是将来可能会消失。同时,chkconfig 也改成了systemctl 了。这里列举了一些常用的对应于 service 和 chkconfig 的…

隔离域逻辑

在一个设计模式类中,我对建模域逻辑进行了有趣的讨论。 具体来说,它与隔离域逻辑有关 。 应用程序通常分为三个部分: 演示(例如桌面GUI,浏览器,Web服务) 域逻辑 基础架构(例如持久…

2.基础

时间:2018年12月7日18:45:59 ----------------------------------------------------------------------------------- 1.字面常量:指数字或文本字符串,值不能被改变 (1)数字:整数,浮点数&…

vsco怎么两个滤镜叠加_PS插件 VSCO滤镜137款预设安装使用教程

文末获取资源VSCO是大名鼎鼎的手机滤镜,以其逼真的胶片文艺复古风爆红,vsco滤镜甚至被誉为照片调色界的业界良心(没有之一)。不过vsco滤镜虽然很好用但苦于一直没有电脑版本,许多摄影爱好者还会用手机调色后放进PS精修。VSCO面板可以在PS上完…

Tensorflow笔记(一)

1.交叉熵 在tensorflow中用:tf.nn.sigmoid_cross_entropy_with_logits()来表示跟sigmoid搭配使用的交叉熵。tf.nn.softmax_cross_entropy_with_logits()来表示跟softmax搭配使用的交叉熵。转载于:https://www.cnblogs.com/fzth-gfh/p/10123182.html

甘特图 知乎_如何使用 Excel 绘制甘特图?

————看了上面几张甘特图,基本上只实现了『计划』和『百分比进度』这两个概念,只有在理想化的一切按照计划发展的情况下才有参考价值。但是实际上执行会提前、也可能延期,进度实时都可能变更,我们应该分开考虑计划图和进度图的…

Kali 2.0 采用ssh连接登陆

Kali GNU/Linux 2.0 \n \l 安装完kali2.0 采用ssh远程连接尽然会出现“无法连接”的情况,下面就此情况来解决问题 第一步:编辑ssh配置文件 rootrslinux:~# vim /etc/ssh/sshd_config 第二步:重新启动ssh服务 rootrslinux:~# /etc/init.d/ssh …

3.运算符与表达式,控制流

时间:2018年12月8日14:56:25 -------------------------------------------------------------------------------------------- 表达式包括运算符与操作数 1、运算符 2、求值顺序 控制流(3种) 1、if语句 number 23 guess int(input…

英语口语练习系列-C37-服饰-询问年龄-沁园春-长沙

服饰 clothes or jewelryyour favorite clothes or jewelryjewelrynecklacebraceletearringsgolddiamondbeadbroochbanglecrystalfashionfashionablesuittrendstylishboutiqueuniquepersonalityinterestuniformoccupationindividualitycasual wearcomfortable clothestradition…

因此,甲骨文杀死了java.net

好吧,还没有……但是他们宣布要在2017年5月之前关闭java.net和 kenai。JohnK . Waters 在ADTmag的Kenai和java.net的“日落”一文中接受了我的采访。 由于Oracle几乎没有提供有关已经托管在java.net上的关键项目会发生什么情况的信息,因此本文中编写的大…