快速业务通道

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

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

package com.javapatterns.abstractfactory; public class TropicalGardener implements Gardener {   public VeggieIF createVeggie(String name) { return new TropicalVeggie(name); }   public FruitIF createFruit(String name) { return new TopicalFruit (name); } }

代码清单3. 实工厂类 TropicalGardener。

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

代码清单4. 接口 VeggieIF。

package com.javapatterns.abstractfactory; public class NorthernVeggie implements VeggieIF {   public NorthernVeggie(String name) { this.name = name; }   public String getName(){ return name; }   public void setName(String name){ this.name = name; }   private String name; }

代码清单5. 实产品类 NorthernVeggie。实产品类 NorthernFruit 与此极为 类似,故略去。

package com.javapatterns.abstractfactory; public class TropicalVeggie implements VeggieIF {   public TropicalVeggie(String name) { this.name = name;}   public String getName(){ return name; }   public void setName(String name){ this.name = name; }   private String name; }

代码清单6. 实产品类 TropicalVeggie。实产品类 TropicalFruit 与此极为 类似,故略去。

笔者对植物的了解有限,为免遗笑大方,在上面的系统里采用了简化处理。 没有给出高纬度和低纬度的水果类或蔬菜类的具体名称。

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

时间:2010-12-17

抽象工厂模式的另一个例子

这个例子讲的是微型计算机的生产。产品族有两个,PC(IBM系列)和Mac (MacIntosh系列)。显然,我们应该使用抽象工厂模式,而不是工厂方法模式, 因为后者适合于处理只有一个产品族的情形。

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

图4. 抽象工厂模式应用于微型计算机生产系统中。两种不同的背景颜色可以 区分两类产品族,及其对应的实工厂类

关于模式的实现

在抽象实现工厂模式时,有下面一些值得注意的技巧。

第一丶实工厂类可以设计成单态类。很显然,在小花果园系统中,我们只需 要 NorthenGardener 和TropicalGardener 的一个实例就可以了。关于单态类的 知识,请见<Java语言单态类创立性模式>。

第二丶在实现抽象工厂模式时,产品类往往分属多于一个的产品族,而针对 每一族,都需要一个实工厂类。在很多情况下,几个实工厂类都彼此相象,只有 些微的差别。

这时,笔者建议使用原始模型(Prototype)模式。这一模式会在以后介绍,届 时作者会进一步阐述这一点。

第三丶设计更加灵活的实工厂。以微型计算机生产系统为例,PCProducer 是 一个实工厂类,它的不灵活之处在于,每一种产品都有一个工厂方法。CPU 有 createCPU(),RAM 有createRAM(),等等。如果一个已有的系统需要扩充,比如 增加硬盘这一新产品,我们就需要增加一系列的接口 (createHD())丶类(HD, PCHD, MacHD)和方法。这似乎不很理想。

一个解决的办法是,把createCPU(),createRAM(), createHD()这几个方法合 并为一个createPart(String type)方法。这个合并后的方法返还一个Part接口 。所有的产品都要实现这一接口,而CPU,RAM,和HD接口则不再需要了。每一个 实产品都需要有一个属性,表明它们的种类是CPU,RAM,和HD。

这样做的结果是,数据类型的丰富结构被扁平化了。客户端拿到的永远是一 个Part接口。这对客户端而言不很安全。

第四丶抽象工厂类可以配备静态方法,以返还实工厂。设计的方法有两种。

一种是以一个静态方法,按照参量的值,返回所对应的实工厂。静态方法的 数据类型是抽象方法类。

另一种是以每一个实工厂类都配备一个静态方法,其数据类型是该

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号