Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 返回对象实例但其行为类似于构造函数的静态方法_Language Agnostic_Constructor - Fatal编程技术网

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

Language agnostic 返回对象实例但其行为类似于构造函数的静态方法,language-agnostic,constructor,Language Agnostic,Constructor,所以我有一个可以用几种方法构造的对象。构造函数具有签名,如从文件加载对象的签名: Object::Object( string filenameToLoadFrom ) ; 它的行为非常简单 Object( "filename.dat" ) ; // loads object from filename 构造函数签名几乎说明了它的功能,尽管静态方法Load可能更好: static Object* Object::Load( string filenameToLoadFrom ) ; (上面

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

Object::Object( string filenameToLoadFrom ) ;
它的行为非常简单

Object( "filename.dat" ) ; // loads object from filename
构造函数签名几乎说明了它的功能,尽管静态方法
Load
可能更好:

static Object* Object::Load( string filenameToLoadFrom ) ;
(上面的语法有点不正确,但你明白了。)

然后我们会遇到这样的情况:构造函数所做的事情从参数上看并不明显。需要一个名称来从API中明确构造函数的作用


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

我认为这是一个好主意,特别是当您需要多个构造函数,它们都使用相同类型的参数时。例如:静态对象*loadFromFile(字符串文件名)和statc对象*loadFromResorce(字符串资源名)。您甚至可以将实际构造函数设为私有,以强制使用静态构造函数

这实际上被认为是一种常见现象。它在特定场景中可能很有用,特别是对于具有相同参数类型并提供非常不同含义的情况


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

不,使用静态工厂不是一个好主意。你有多少文件?为什么不看看DI?@DarthVader为什么需要静态工厂?有趣的是,这被称为。命名构造函数还有一个优点,即在发生故障时能够