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 に答える