您现在的位置是: 软件 > 开发者网络 > 程序方舟 > Java专栏 > 正文


-明明白白注册表工具
-PHP优化与安全
-Dreamweaver MX 新功能体验
-Visual Basic 图形及图像处理

爪哇语言工厂方法创立性模式介绍
2001-11-28· ·阎宏 ··yesky

1 2 3 4 5 6 7 8 9 10 11  下一页


  正如同笔者在<简单工厂模式>一节里介绍的,工厂模式有简单工厂模式,工厂方法模式和抽象工厂模式几种形态。简单工厂模式已经在前面作过介绍。在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。

  而本节要讨论的工厂方法模式是简单工厂模式的进一步抽象化和推广。它比简单工厂模式聪明的地方在于, 它不再作为一个具体的交通警察的面貌出现,而是以交通警察局的面貌出现。它把具体的车辆交通交给下面去管理。换言之,工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给子类去作。处于工厂方法模式的中心位置上的类甚至都不去接触那一个产品类应当被实例化这种细节。这种进一步抽象化的结果,是这种新的模式可以用来处理更加复杂的情形。

  为什么需要工厂方法模式

  现在,让我们继续考察我们的小花果园。在<简单工厂模式>一节里,我们在后花园里引进了水果类植物, 构造了简单工厂模式来处理, 使用一个FruitGardener类来负责创立水果类的实例。见下图。


图1. 简单工厂模式。FruitGardener掌握所有水果类的生杀大权。


  在这一节里,我们准备再次引进蔬菜类植物,比如

   西红柿 (Tomato)

   土豆 (Potato)

   西芥兰花 (Broccoli)

  蔬菜与花和水果当然有共同点,可又有不同之处。蔬菜需要喷洒(dust)杀虫剂(pesticide)除虫, 不同的蔬菜需要喷洒不同的杀虫剂,等等。怎么办呢?

  那么,再借用一下简单工厂模式不就行了? 再设计一个专管蔬菜类植物的工厂类,比如


 图2. 简单工厂模式。VeggieGardener掌握所有蔬菜类的生杀大权

  这样做一个明显的不足点就是不够一般化和抽象化。在FruitGardener和VeggieGardener类之间明显存在很多共同点, 这些共同点应当抽出来一般化和框架化。这样一来,如果后花园的主人决定再在园子里引进些树木类植物时, 我们有框架化的处理方法。本节所要引入的工厂方法模式就符合这样的要求。

1 2 3 4 5 6 7 8 9 10 11  下一页

【责任编辑:方舟】
【发表评论】【关闭窗口】
■ 相关内容
 设计模式之State
 设计模式之Facade(外观)
 设计模式之State
 设计模式之Observer
 Java模式开发之责任链模式
 J2EE中的设计模式
 Java通讯程序一例
 Java Swing中的键盘事件处理
 JavaMail快速入门
 JavaMail快速入门
 J2EE平台架构上开发CRM的技术过程控制
 爪哇语言结构性模式之变压器模式介绍
 用JAVA实现线程等待提示框
 爪哇语言抽象工厂创立性模式介绍
 爪哇语言简单工厂创立性模式介绍
 爪哇语言单态创立性模式介绍
 雅加达蚂蚁:新一代Java产品生成器
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!