Programming 版 (精华区)

发信人: Sun (大灯泡), 信区: SoftEng
标  题: [Design Pattern] Factory Method 
发信站: 哈工大紫丁香 (2001年03月15日09:09:10 星期四), 站内信件

发信人:Crystal_Y (小衲)  版面名称:SoftEng(602)
标 题:[Design Pattern] Factory Method
发信站:中国科大BBS站 (Wed, 14 Mar 2001 15:26:25 )
标 记:精华


  Factory Method这个Pattern应该是最基本最常见的一类了。

  在运行时刻,当程序需要产生一个很明确的对象了(即ConcreteProduct),
我们调用一个Factory Method,像是交给工厂一个任务,然后它制造出你所
需要的对象。那么,这个工厂是和你这个ConcreteProduct对应的,是个
ConcreteCreator。如果你的程序里有各种ConcreteProduct,而且这些对象
是有共同之处的,那么我们可以定义一个ConcreteProduct的基类Product,
再定义一个抽象的工厂Creator,在Creator里面声明一个Factory Method,
然后每一个ConcreteProduct对应实现一个ConcreteCreator,这就是这个Pattern
的基本结构~
  为什么不在程序里直接new一个ConcreteProduct呢?
  因为设计程序的过程,与上面谈的过程相反,是从抽象到具体,在
一个程序的初步框架里,本来就有Product的概念,在你知道
将来会出现各种ConcreteProduct而现在又不需要关心它们如何实现的
条件下,就通过一个抽象的Creator和同样抽象的函数Factory Method,
使得在这个初步框架里就可以创建Product以及将来的ConcreteProduct,而不会
因为对于ConcreteProduct细节的未知而无法设计现在的框架。

  Factory Method的实现有两种不同的方式,一种,对于Creator里的
Factory Method,什么都不做,整个Creator是个抽象类;另一种,Creator里的
Factory Method提供了一种缺省的创建方式,这样一来,子类就有可能对这个缺省
的创建方式进行重载,给子类提供了一个hook。

  通常Factory Method会造成一种parallel class hierarchies,ConcreteProduct
和ConcreteCreator是平行一一对应的,这尤其适合于Helper这个概念,这在GoF那本
书里讲得挺详细。(今天看到J2EE里有个View Helper这个Pattern)

  如果不想造成这种局面的话,可以给Creator提供一个参数,一般是一个类型的ID,

让它根据这个ID来创建不同的ConcreteProduct,只是这样一来,Creator就要了解
ConcreteProduct的信息了,这种方式,适合于对象到storage的存取。

--
※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn]



----------------------------------------------------------------------------
----

--
    我很差劲!
    我是一个不务正业的人!
    因为,在我这个年纪,
    正业是找女朋友。

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: sunner.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.293毫秒