1 基础知识
1.1 标准定义
抽象工厂模式标准定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
1.2 分析和说明
抽象工厂模式是一个创建性的模式。与工厂方法模式一样,它要求工厂类和产品类分开。但是核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。一个具体的工厂类负责创建产品族中的各个产品。其实质就是由1个工厂类层次、N个产品类层次和N×M个产品组成。
3.Quarkus的实现程序代码
Quarkus程序实现主要包括Company接口文件,Computer抽象类文件,Telephone抽象类文件,CompanyA类文件,CompanyB类文件,Mobile类文件、DesktopPhone类文件、NotebookComputer类文件和PersonalComputer类文件等9个文件。其关系如图3所示。下面分别列出这9个文件的程序代码,最后列出测试代码并显示输出结果。
Company属于抽象工厂(Abstract Factory)角色,Company的接口程序代码清单01所示。
程序代码清单01
Computer抽象类和Telephone抽象类属于抽象产品(Abstract Product)角色,Computer和Telephone抽象类程序代码清单02所示。
程序代码清单02
CompanyA类和CompanyB类属于具体工厂类(Concrete Factory)角色,CompanyA类和CompanyB类程序代码清单03所示。
程序代码清单03
Mobile类和DesktopPhone类属于具体产品(Concrete Product)角色,Mobile类和DesktopPhone类程序代码清单04所示。
程序代码清单04
NotebookComputer类和PersonalComputer类属于具体产品(Concrete Product)角色,NotebookComputer类和PersonalComputer类程序代码清单05所示。
程序代码清单05
抽象工厂模式测试程序的代码清单06如下:
程序代码清单06
抽象工厂模式测试类输出结果如下所示:
这是个人计算机的功能
这是笔记本电脑的功能
这是座机电话的功能
这是手机的功能
4. 相关Quarkus程序源码下载
可以直接从github上获取代码,读者可以从github上clone预先准备好的示例代码。
git clone https://github.com/rengang66/quarkus-sample-gof23.git
这是一个Maven项目,然后Maven导入工程。该程序位于“srcmainjavacomiiitquarkussamplegof23creationalpatternabstractfactory”目录中。
同时也可以从gitee上clone预先准备好的示例代码,命令如下:
git clone https://gitee.com/rengang66/quarkus-sample-gof23.git
5 扩展和说明
抽象工厂模式也是应用比较广泛的设计模式。对于抽象工厂模式,从两个层次上进行扩展。
一种是从抽象工厂中继承出来的具体工厂。即上述场景中的CompanyA,CompanyB,可以根据情况在增加CompanyC、CompanyD等。
一种是对产品进行扩充。可以增加一个产品类族,如计算机、手机、再增加电视机等。还有一种是增加具体的产品。如计算机下面还可以增加服务器等。
参考文献
[1] E.Gamma, R.Helm, R.Johnson, and Vlissides. Design Patterns Elements of Reusable Object Oriented Software. Addison-Wesley, 1995
[2] E.Gamma, R.Helm, R.Johnson, and Vlissides.著,李英军等译,设计模式:可复用面向对象软件的基础,北京:机械工业出版 .2000.9.
[3] 阎宏,Java与模式,北京:电子工业出版 . 2002.10
[4] 王俊峰 戚晓滨. 设计模式和UML. 计算机应用研究,1999.16(5), 27-29,39.
[5] 陈琴 朱正强. UML在设计模式描述中的应用. 计算机工程与设计,2003.24(4), 81-84.
[6] 龚永生. 实现一个Java抽象工厂模式. 开放系统世界,2002.(10), 76-82.
[7] 吴宣为. 一种基于设计模式的动态 表设计. 微计算机信息,2007.(24), 222-223,277.
[8] 胡永久 庄成山. 抽象工厂模式与MFC文档/视图/窗口创建方式的比较. 现代计算机:下半月版,2004.(10), 21-24.
[9] 梁文娟 郑逢斌 杜莹 党兰学. 抽象工厂模式在.net多层分布式程序中的应用. 计算机时代,2006.(3), 27-29.
[10] 汤继伟 曹作良 汪秀春. 抽象工厂模式在ERP系统单据处理中的应用. 天津理工学院学 ,2004.20(1), 101-103.
[11] 陈灯 王勇 徐启丰. 用抽象工厂模式实现某型飞机机载总线仿真. 计算机仿真,2003.20(12), 27-29.
[12] 顾明. 基于软件设计模式的GIS中间件描述. 计算机应用与软件,2008.25(3), 86-88.
[13] 高瑞明 吴洁明. 基于设计模式数据访问组件的设计和实现. 现代计算机:下半月版,2008.(2), 122-123.
[14] 阎小涛 刘涛 沈为群. 设计模式在航空发动机试验台测控系统中的应用. 兵工自动化,2007.26(10), 62-64.
[15] 尚鲜连. 设计模式在数据持久层设计中的应用. 重庆科技学院学 :自然科学版,2008.10(6), 108-111.
[16] 吴超. 设计模式在数据库浏览系统中的应用. 计算机工程与科学,2006.(z2), 148-149.
[17] 刘蕴珊 刘列励. 设计模式在信息系统中的应用研究. 信息技术,2008.32(10), 121-123,126.
[18] 朱晓磊 许向众. 设计模式在智能客户端软件工厂中的应用. 电脑应用技术,2008.(12), 7-13.
[19] 刘华 黄龙水 曹万华. 一种人机界面风格动态切换的实现技术. 计算机与数字工程,2006.34(2), 90-92,96.
[20] Quarkus官 . https://quarkus.io/
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树行为抽象和Lambda流和行为抽象92556 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!