原型模式中的`Clone()`是否被视为工厂方法?

时间:2019-06-10 21:08:18

标签: design-patterns

Gamma等人的设计模式描述了原型模式:

enter image description here

Clone()是否被视为工厂方法? (为了进行比较,抽象工厂是工厂方法的集合。)

为什么(不是)工厂方法?为了澄清起见,您还可以提供工厂方法的定义吗?

Clone()的示例是

Door* Door::Clone  () const {
return new Door(*this);
}

存在类似的问题In builder pattern, is method `buildpart()` factory methods?

1 个答案:

答案 0 :(得分:1)

尽管存在解释的空间,但根据common definitions clone()来说,不能作为工厂方法,因为客户端代码知道实例化逻辑。客户端代码知道这种逻辑,因为它调用方法clone(),该方法具有明确定义的语义(以创建对象的副本)。

相反,工厂方法隐藏了对象的创建方式。可以通过克隆或其他方式完成。

请注意,可以想象有一个使用Prototype模式的工厂方法。这将导致这两种模式的组合,但不会将原型模式作为Factory模式传递。