オブジェクト指向のデザインパターンであるstaticファクトリメソッドの利点、使用例を知ることができます記事を読む所要時間は10分です。結論staticファクトリメソッドは、コンストラクタで不可能なことをしたいときに使うべき!いきなり結論です。以降、詳細を解説していきます。以下、解説していきます。1.名前をつけることができるコンストラクタの名前はクラス名と同じにしなければならないので、「この場合はこういうオブジェクトを返すことを表現したい!」と思っていても、コンストラクタでは表現できません。この問題の解決にstaticファクトリメソッドが使えます。BigIntegerのprobablePrimeというstaticファクトリメソッドは、その名の通り、「おそらく素数」の値を生成します。この内容は、コンストラクタでは表現できません。2.オブジェクトを再利用可能クラスの設計次第ですが、生成したオブジェクトをクラス内部で保持しておき、staticファクトリメソッドが呼び出されるたびに、保持しておいたオブジェクトを返すようにしておけば、オブジェクト生成のコストを削減できます。以下のような実装になります。exam;}}makeExampleで、内部に保持しているexamオブジェクトを返すようにしています。ここでは最初に呼ばれたとき(まだnullのとき)だけ生成するようにしています。3.サブクラスのオブジェクトを返せるコンストラクタで返せるオブジェクトは、そのクラスそのもののオブジェクトしかあり得ませんよね。staticファクトリメソッドを使うとどうでしょうか。内部では生成するオブジェクトを自由に選べるので、メソッドの戻り値の型に一致してさえいれば、好きなオブジェクトを生成して返すことができます。そのクラスのサブクラスを生成して返すことができるわけです。これにより、引数の内容で返すオブジェクトを切り替える、ファクトリパターンのようなことが可能になります。4.エラー処理が可能コンストラクタの内部でエラーが発生してしまった場合、どうなるでしょうか。コンストラクタ内部では例外のキャッチやエラー処理ができないため、もし例外が発生すると、オブジェクト生成失敗してそれっきり、となってしまいます。staticファクトリメソッドでは例外のキャッチやエラー処理を行うことができるので、例外をスローしたり、戻り値で異常値を返したりすることができるのです。オブジェクト生成時に複雑な処理をしているクラスでは、有効な施策だと思います。コメントをキャンセルメールアドレスが公開されることはありません。