原书中给出了
AbstractFactory
范式的三种实现方式:
1、
作为一个
Singleton
实现;
这种方式的说明将在说到
Singleton
范式补充。
2、
创建系列产品;
在这种方式下又包含两种子方式:
a)
使用
Factory Method
范式;
简单地说,使用这种方式的实现就是定义一个接口,针对自己定义的产品(
widget
)集合中每个类型定义一个创建方法,并在其子类中提供实现。
b)
使用
Prototype
范式;
原文
Implementation
部分
:
“
The concrete factory is initialized with a prototypical instance of each product in the family, and it creates a new product by cloning its prototype
.
”
这句话的意思是说,对在同一个产品簇的产品,当它们的工厂被实例化时,它们同时也被实例化到这个工厂中,并在客户需要其中某个类型的产品实例时,使用
clone
方式创建一个新的对象给客户。
原本
Implementation
部分
:
“
The Prototype-based approach eliminates the need for a new concrete factory class for each new product family
.
”这句话是上句引文的下一句。
我个人认为,这句话的本意是针对
a
)方法而言的;但却与它的上一句话相互矛盾。因为上一句说这个方法是针对“
in the family
”的,而本句是针对“
a new concrete factory
”和“
new product family
”的。稍微有点英语常识的人都知道,“
the
”是定冠词,一般用于特指;而“
a
”在这里表示任意。因此我认为是说不通的,换句话说,使用基于
Prototype
的实现仍然不能消除一个具体的工厂针对一个具体产品簇的限制。即使可以,一般应用在该产品集合包含较少的产品类型时使用。
3、
定义可扩展的工厂;
这种方式针对自己定义的产品(
widget
)集合不可预知的类型扩展,提供一种叠加的方式,以便扩展自己的工厂来生产被扩展的产品类型。
posted on 2006-06-23 15:31
静静的流水 阅读(416)
评论(1) 编辑 收藏 引用 所属分类:
Design Patterns