快速业务通道

Java语言抽象工厂创立性模式介绍 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

Java语言抽象工厂创立性模式介绍

时间:2010-12-17

工厂模式有简单工厂模式,工厂方法模式和抽象工厂模式几种形态。其中简单 工厂模式和工厂方法模式已经在前面作过介绍。在这里,我们来介绍抽象工厂模 式。

抽象工厂模式是所有形态的工厂模式中最为抽象和最具广泛性的一种形态。

抽象工厂模式的定义

抽象工厂模式是工厂方法模式的进一步扩广化和抽象化。我们给出抽象工厂 模式的类图定义如下。

Java语言抽象工厂创立性模式介绍 - 编程入门网

图1. 抽象工厂模式的类图定义

从上图可以看出,简单工厂模式涉及到以下的角色

抽象工厂(AbstractFactory)类或接口

担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模 式中创立对象的工厂类必须实现这个接口,或继承这个类。

实工厂类 (Conrete Factory)

担任这个角色的是与应用程序紧密相关的,直接在应用程序调用下,创立产 品实例的那样一些类。

抽象产品 (Abstract Product)

担任这个角色的类是工厂方法模式所创立的对象的父类,或它们共同拥有的 接口。

实产品 (Concrete Product)

担任这个角色的类是工厂方法模式所创立的任何对象所属的类。

怎么这个类图和工厂方法模式的类图看起来是一样的?

是的,图是一样的,但是含义有很大的不同。必须指出,在抽象工厂模式中 ,抽象产品 (AbstractProduct) 可能是一个或多个,从而构成一个或多个产品 族(Product Family)。 在只有一个产品族的情况下,抽象工厂模式实际上退化 到工厂方法模式。在上面的类图中,只给出了一个产品族,相当于位图中的一个 点,而完整的位图应当是三维的,如下图。

Java语言抽象工厂创立性模式介绍 - 编程入门网

图2. 抽象工厂模式的位图

Java语言抽象工厂创立性模式介绍(2)

时间:2010-12-17

从位图可以清楚地看到,与纸面垂直的数轴,即第三维轴,是代表产品族的 数轴。上面的位图中展示的是有两个产品族,族A和族B的情形。

在只有一个产品族时,第三维就坍缩掉,位图也就只剩下两维。这时抽象工 厂模式就退化得与工厂方法模式一模一样。

在什么情形下应当使用抽象工厂模式

在以下情况下,应当考虑使用抽象工厂模式。

首先,一个系统应当不依赖于产品类实例被创立,组成,和表示的细节。这 对于所有形态的工厂模式都是重要的。

其次,这个系统的产品有多于一个的产品族。

第三,同属于同一个产品族的产品是设计成在一起使用的。这一约束必须得 在系统的设计中体现出来。

最后,不同的产品以一系列的接口的面貌出现,从而使系统不依赖于接口实 现的细节。

其中第二丶第三个条件是我们选用抽象工厂模式而非其它形态的工厂模式的 关键性条件。

抽象工厂模式在小花果园系统中的实现

现在,我们在佛罗里达的渡假小屋修整好啦。接下来,一项重要而光荣的工 作,就是开发小屋后面的小花园。这意味着,我们有两处小花园需要照料,一处 在北方地区,另一处在亚热带地区。抽象工厂模式正好适用于我们的情况。

Java语言抽象工厂创立性模式介绍 - 编程入门网

图3. 抽象工厂模式应用于小花果园系统中。三种不同的背景颜色可以区分工 厂类,蔬菜类(第一产品族),和水果类的类图(第二产品族)

两处花园就相当于两个产品族。显然,给北方花园的植物是要种植在一起的 ,给南方花园的植物是要另种植在一起的。这种分别应当体现在系统的设计上面 。这就满足了应当使用抽象工厂模式的第二和第三个条件。

package com.javapatterns.abstractfactory; public interface Gardener {}

代码清单1. 接口 Gardener。

package com.javapatterns.abstractfactory; public class NorthenGardener implements Gardener {   public VeggieIF createVeggie(String name) { return new NorthernVeggie(name); }   public FruitIF createFruit(String name) { return new NorthernFruit (name); } }

代码清单2. 实工厂类 NorthenGard

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号