design-patterns - 原型模式中的“Clone()”是否被视为工厂方法?
问题描述
Gamma 等人的设计模式描述了原型模式:
是否Clone()
被视为工厂方法?(为了比较,抽象工厂是工厂方法的集合。)
为什么他们(不是)工厂方法?为了澄清起见,您能否提供工厂方法的定义?
一个例子Clone()
是
Door* Door::Clone () const {
return new Door(*this);
}
有一个类似的问题在构建器模式中,方法 `buildpart()` 是工厂方法吗?
解决方案
尽管有解释的余地,但根据通用定义 clone()
,它不符合工厂方法的条件,因为客户端代码知道实例化逻辑。客户端代码知道这个逻辑,因为它调用方法clone()
,它具有明确定义的语义(制作对象的副本)。
相反,工厂方法隐藏了对象的创建方式。它可以通过克隆或其他方式来完成。
请注意,您可以想象有一个使用原型模式的工厂方法。这将导致两种模式的组合,但不会在 Prototype 模式中作为工厂模式传递。