2

所以我有一个可以通过几种方式构建的对象。构造函数具有签名,例如从文件加载对象的签名:

Object::Object( string filenameToLoadFrom ) ;

它的行为方式非常简单。

Object( "filename.dat" ) ; // loads object from filename

构造函数签名几乎说明了它的作用,尽管静态方法Load可能会更好:

static Object* Object::Load( string filenameToLoadFrom ) ;

(上面的语法有点不正确,但你明白了。)

然后我们会遇到构造函数所做的事情并不能从参数中 立即看出的情况。需要一个名称才能从 API 中清楚地看出构造函数的作用。

问题是,编写返回对象实例的静态方法是否是个好主意,只是为了能够命名构造函数?

4

2 回答 2

3

这实际上被认为是工厂方法模式的一个常见的次要好处。它在特定场景中可能很有用,特别是对于具有相同参数类型提供非常不同含义的事物。

例如,有一个表示“角度”的类并不少见,它可以由可以表示度数或弧度的单个浮点数构造。构造函数没有提供足够的上下文(或干净的方式)来实现这一点,其中“工厂方法”使这一点非常清楚。

于 2012-07-11T18:38:19.860 回答
0

我相信这是一个好主意,特别是如果您需要一个以上都采用相同类型参数的构造函数。例如:static Object* loadFromFile(String fileName) 和 statc Object* loadFromResorce(String resourceName)。您甚至可以将实际构造函数设为私有以强制使用静态构造函数。

于 2012-07-11T18:38:09.853 回答