Gamma等人的设计模式描述了原型模式:
Clone()
是否被视为工厂方法? (为了进行比较,抽象工厂是工厂方法的集合。)
为什么(不是)工厂方法?为了澄清起见,您还可以提供工厂方法的定义吗?
Clone()
的示例是
Door* Door::Clone () const {
return new Door(*this);
}
存在类似的问题In builder pattern, is method `buildpart()` factory methods?
答案 0 :(得分:1)
尽管存在解释的空间,但根据common definitions clone()
来说,不不能作为工厂方法,因为客户端代码知道实例化逻辑。客户端代码知道这种逻辑,因为它调用方法clone()
,该方法具有明确定义的语义(以创建对象的副本)。
相反,工厂方法隐藏了对象的创建方式。可以通过克隆或其他方式完成。
请注意,可以想象有一个使用Prototype模式的工厂方法。这将导致这两种模式的组合,但不会将原型模式作为Factory模式传递。