返回对象实例但行为类似于构造函数的静态方法

时间:2012-07-11 18:24:43

标签: language-agnostic constructor

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

Object::Object( string filenameToLoadFrom ) ;

它的表现非常简单。

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

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

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

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

然后我们进入了一些情况,构造函数从参数中做出的并不是很明显需要一个名称,以便从API中明确构造函数的作用。

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

2 个答案:

答案 0 :(得分:3)

这实际上被认为是一种常见的secondary benefit of the Factory Method Pattern。它在特定场景中可能很有用,特别是对于具有相同参数类型且提供非常不同含义的事物。

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

答案 1 :(得分:0)

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