所以我有一个可以通过几种方式构造的对象。构造函数具有类似于从文件加载对象的签名:
Object::Object( string filenameToLoadFrom ) ;
它的行为方式非常简单。
Object( "filename.dat" ) ; // loads object from filename
构造函数签名几乎说明了它的作用,尽管静态方法 Load
可能会更好:
static Object* Object::Load( string filenameToLoadFrom ) ;
(上面的语法有点不正确,但你明白了。)
然后我们会遇到这样的情况:构造函数所做的事情从参数中并不是立即显而易见的。 需要一个名称来从 API 中清楚地了解构造函数的作用。
问题是,仅仅为了能够命名构造函数,编写返回对象实例的静态方法是个好主意吗?
最佳答案
这实际上被认为是常见的secondary benefit of the Factory Method Pattern 。它在特定场景中可能很有用,特别是对于具有相同参数类型但提供截然不同含义的情况。
例如,有一个表示“角度”的类并不罕见,它可以由表示度数或弧度的单个 float 构造。构造函数没有提供足够的上下文(或干净的方法)来实现这一点,其中“工厂方法”使这一点非常清楚。
关于language-agnostic - 返回对象实例但行为类似于构造函数的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11438984/