首页 > 解决方案 > 原型模式中的“Clone()”是否被视为工厂方法?

问题描述

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

在此处输入图像描述

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

为什么他们(不是)工厂方法?为了澄清起见,您能否提供工厂方法的定义?

一个例子Clone()

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

有一个类似的问题在构建器模式中,方法 `buildpart()` 是工厂方法吗?

标签: design-patterns

解决方案


尽管有解释的余地​​,但根据通用定义 clone(),它符合工厂方法的条件,因为客户端代码知道实例化逻辑。客户端代码知道这个逻辑,因为它调用方法clone(),它具有明确定义的语义(制作对象的副本)。

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

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


推荐阅读