时间:2024-07-28
□程裕强
(玉林师范学院 数学与信息科学学院,广西 玉林 537000)
抽象工厂模式探讨
□程裕强
(玉林师范学院 数学与信息科学学院,广西 玉林 537000)
工厂模式是常用的设计模式,一般分为简单工厂模式、工厂方法模式、抽象工厂模式三类. 工厂方法模式是对简单工厂模式推广,抽象工厂模式是对工厂方法模式推广. 简单工厂模式和工厂方法模式是针对单个产品族的问题,如果对应于多个产品族,则不宜解决. 针对这一问题,本文通过Java语言实现了抽象方法模式来解决多个产品族的问题.
设计模式;工厂模式;抽象工厂模式
设计模式是针对某一领域问题的最佳解决方法,是一套可以反复使用、多数人知晓的设计方案,是经验总结.Java EE主流框架应用了多个设计模式完成,设计模式是Java EE的重要理论基础.最为著名的四人帮的《设计模式》[1]书中介绍了23种基本设计模式,最常用的设计模式有单例模式、工厂模式、适配器模式、装饰模式、观察者模式、代理模式等.工厂模式是常用的设计模式,在Java EE的Spring框架中就有具体的应用.工厂模式符合开闭原则,对扩展开放,对修改关闭.工厂模式[2]一般分为三类:简单工厂模式、工厂方法模式、抽象工厂模式.工厂方法模式是对简单工厂模式推广,抽象工厂模式是对工厂方法模式推广.
简单工厂模式的中工厂类集中了所有产品创建逻辑,但是没有提供新产品的创建逻辑.比如现在设计了新的产品A,那么就需要在工厂类Factory中添加一个if语句处理新产品A.也就是工厂类不能正常工作,所有的生成线都停下来,这就违反了“开闭原则”.
工厂方法模式是对简单工厂模式的进一步抽象和推广,基本思想是定义一个抽象工厂,将实际创建工作推迟到子类中.这样就可以解决简单工厂模式扩展性差的问题,比如新增加一个产品A,只需定义一个A具体产品类,继承抽象产品类;然后定义A的具体工厂,继承或实现抽象工厂.对其他生产流程不影响.缺点是需要抽象工厂和相应的具体工厂,增加了一个类层次.工厂方法模式对于简单问题有些复杂.
简单工厂模式和工厂方法模式是针对单个产品族的问题,如果对应于多个产品族,则不宜解决[3].比如有一个军工厂生产子弹和枪支,子弹类型有手枪子弹和机枪子弹等,枪支类型有手枪和机枪等.也即是该军工厂有2个产品族,子弹产品族和枪支产品族.如果专门设立一个具体工厂生产枪支,而另一个具体工厂生成子弹,可能出现枪支与子弹不配套的问题.由于手枪和手枪子弹配套,机枪与机枪子弹配套,可以设立一个工厂负责生产手枪和配套的手枪子弹,再设立一个工厂生产机枪和配套的机枪子弹.这就是抽象工厂的思想,抽象工厂模式可以很好解决多维产品族的问题,而简单工厂模式和工厂方法模式只适用于一维产品族问题.
抽象工厂模式由四部分组成,UML图如图1所示.抽象产品(AbstractProduct):对应一个产品族有一个抽象产品类或者接口,多个产品族有多个抽象产品.如图1所示,有AbstractProductA和AbstractProductB两个抽象产品.具体产品(ConcreteProduct):表示具体的产品,同一个产品族的产品都是该产品族的抽象产品的子类.比如,AbstractProductA的具体产品有ProductA1和ProductA2;AbstractProductB的具体产品有ProductB1和ProductB2.抽象工厂(AbstractFactory):担任这个角色的是工厂方法模式的核心,它里面应该包含所有的产品创建的抽象方法.比如有cteateProductA和createProductB连个抽象方法,用于创建产品A和产品B,与具体的业务逻辑无关的.具体工厂(ConcreteFactory):具体的工厂,抽象工厂的子类.该类具有创建产品的业务逻辑,创建具有特定实现的产品对象.比如有具体工厂ConcreteFactory1生产具体产品ProductA1和ProductB1,具体工厂ConcreteFactory2生产具体产品ProductA2和ProductB2.
图1 抽象工厂的UML图Fig.1 UML diagrams of Abstract Factory
根据抽象工厂的UML图,下面给出具体的代码来说明抽象工厂模式.第一个产族:子弹.首先,定义一个抽象产品类Bullet,代码如下.
上面每一程序一个文件,且在同一目录下面.客户端程序Client在Windows平台和Linux平台下编译运行结果如图2所示,程序说明请参见注释.
图2 抽象工厂模式Fig.2 Abstract Factory Pattern
简单工厂用来生产同一等级结构中的所有产品,对于增加新的产品,无能为力。工厂模式用来生产同一等级结构中的固定产品,支持增加任意产品.抽象工厂用来生产不同产品族的全部产品,支持增加产品族。本文通过Java语言实现了抽象方法模式,用来解决多个产品族的问题. ■
[1]伽玛.设计模式:可复用面向对象软件的基础[M].机械工业出版社,2000.
[2]Steven John Metsker, William C.Wake Java.设计模式(第2版)[M].电子工业出版社,2012.
[3]梁燕来,程裕强.Java面向对象程序设计[M].人民邮电出版社,2013.
【责任编辑 谢明俊】
Research on Abstract Factory Pattern
CHEN Yu-qiang
(College of Maths & Information Science, Yulin Normal University, Yulin, Guangxi 537000)
The factory pattern is a common design pattern, could be further divided into three specific design patterns, simple factory pattern, factory method pattern and the abstract factory pattern. The factory method pattern is the extension of simple factory pattern, and the abstract factory pattern also is the extension of the factory method pattern. In general, the first two are designed to tackle the single product family, but not to tackle the multi product family. In response to this problem, the java language is applied to implement the abstract factory pattern.
design pattern; factory pattern, abstract factory pattern
TP39
A
1004-4671(2014)02-0082-05
2013-09-01
程裕强(1982~),男,汉族,安徽阜阳人,玉林师范学院讲师,东华大学工学硕士。研究方向:本体论、语义网、自然语言处理。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!