Programming 版 (精华区)

发信人: Sun (大灯泡), 信区: SoftEng
标  题: [Design Pattern]Abstract Factory
发信站: 哈工大紫丁香 (2001年03月17日00:41:02 星期六), 站内信件

发信人:Crystal_Y (小衲)  版面名称:SoftEng(702)
标 题:[Design Pattern]Abstract Factory
发信站:中国科大BBS站 (Thu, 15 Mar 2001 14:40:39 )
标 记:精华

  Abstract Factory的特点就是你手头上会有若干family的products

  在GoF那本书里,你把Abstract Factory结构图上的ProductB全都去掉,
其形状就和Factory Method的结构一样了呵呵
  所以它的特点就是你需要管理属于一个family的products,而这个family
又有很多种。
  尤其是,你特别希望把很多products约束在一个scope里的话,就把它们组成
一个family,让一个ConcreteFactory来实现创建它们的工作,而让Abstract 
Factory来规范它们创建的接口,这种约束在GoF的sample code里说得很清楚,
用C++的话来说,就是保证指针转换不会出错。

  如此一来,作不同family之间的切换,就变得很容易了,当然,使用这些
product family的client代码无需更改(这个好处到处都有呵呵)
  缺陷就是,如果要加入一个新的family,而这个family所提供products
的接口如果不同于现有的Abstract Factory规范的接口,那么就比较困难了。GoF
谈到一个解决方法,对于用C++的人来说,这个方法是不太好的,是Factory Method
里谈到的一种方法,在创建函数CreateProduct里加一个类型的identifier,这种方
法有两个缺陷:
  1.必须了解ConcreteProduct的信息,用Prototype模式可以缓解之,Prototype
将要求如注册这样的函数,以使得CreateProduct在拿到identifier后可以索引到
正确的prototype以进行clone。
  2.这样创建返回的是一个抽象类型,在使用它的时候,将不得不作指针转换。

  CreateProduct很容易地就可以做成一个Factory Method,这是最简单的实现方式。
而当family很多的时候,如果不想编写同family数目一样多的ConcreteFactory类,
还可以用Prototype,其原则和上面是一样的。
  
  btw:哪位能讲一讲什么叫treat classes as first-class objects这样的语言?
如SmallTalk

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



--
    如果程序员懂得了软件工程,
    那么他就不再是牛,
    更不是妓女了。

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