所以我有一个可以通过几种方式构建的对象。构造函数具有签名,例如从文件加载对象的签名:
Object::Object( string filenameToLoadFrom ) ;
它的表现非常简单。
Object( "filename.dat" ) ; // loads object from filename
构造函数签名几乎说明了它的作用,尽管静态方法Load
可能会更好:
static Object* Object::Load( string filenameToLoadFrom ) ;
(上面的语法稍微不正确,但你明白了。)
然后我们进入了一些情况,构造函数从参数中做出的并不是很明显。 需要一个名称,以便从API中明确构造函数的作用。
问题是,编写返回对象实例的静态方法是一个好主意,只是为了能够命名构造函数?
答案 0 :(得分:3)
这实际上被认为是一种常见的secondary benefit of the Factory Method Pattern。它在特定场景中可能很有用,特别是对于具有相同参数类型且提供非常不同含义的事物。
例如,有一个表示“角度”的类并不罕见,它可以由一个浮点数构成,它可以表示度或弧度。构造函数没有提供足够的上下文(或干净的方法)来实现它,“工厂方法”使这一点非常清楚。
答案 1 :(得分:0)
我相信这是一个好主意,特别是如果你需要多个构造函数,它们都采用相同类型的参数。例如:static Object * loadFromFile(String fileName)和statc Object * loadFromResorce(String resourceName)。您甚至可以将实际构造函数设置为私有以强制使用静态构造函数。