私はJoshua Blochによる『Effective Java 』を読んでいますが、これまでのところ、その評判に本当に応えています。最初の項目は、コンストラクターに対する静的ファクトリ メソッドの説得力のあるケースです。古き良きコンストラクタの有効性に疑問を持ち始めたほどです:)。
本のメリット・デメリットをまとめると以下のようになります。
利点:
- 彼らには名前があります!
- 完全なインスタンス コントロール (シングルトン、パフォーマンスなど) があります。
- サブタイプ/インターフェースを返すことができます
- コンパイラは型推論を提供できます
短所:
- プライベート クラスはサブクラス化できません
- コンストラクターのようにドキュメントで目立たない
最初の欠点は、実際には良いことです(本で言及されているように)。2 つ目は、マイナーな欠点であり、今後の Java リリース (javadoc の注釈など) で簡単に解決できると思います。
最終的に、ファクトリ メソッドにはコンストラクターのほとんどすべての利点があり、さらに多くの利点があり、実際の欠点はないようです。
したがって、私の質問は基本的に 3 つの部分に分かれています。
- コンストラクターよりもデフォルトで常に静的ファクトリ メソッドを使用することをお勧めしますか?
- コンストラクターを使用することは正当化されますか?
- オブジェクト指向言語がファクトリに言語レベルのサポートを提供しないのはなぜですか?
注:同様の質問が 2 つあります。コンストラクタを使用する場合と、getInstance() メソッド (静的ファクトリ メソッド) を使用する場合です。オブジェクトの作成: コンストラクターまたは静的ファクトリーメソッド。ただし、答えは上記のリストを提供するか、私がすでに知っている静的ファクトリメソッドの背後にある理論的根拠を繰り返します。