コンストラクターをすぐに使わずに、staticファクトリメソッドが利用できないかを考慮する。
static ファクトリメソッドの利点
名前を持てる
コンストラクタは名前をもてないため何を意味しているのかがわかりずらい、
staticファクトリメソッドでは名前をつけることができるのでその値が何を意味しているのかがすぐにわかる
インスタンスを生成するコストがかからない
通常のコンストラクタを使用する場合、
public class BooleanConstructorExample {
public static void main(String[] args) {
Boolean a = new Boolean(true);
Boolean b = new Boolean(true);
System.out.println(a == b); // false(毎回新しいオブジェクト)
}
}
一方、staticファクトリメソッドは
public class BooleanFactoryExample {
public static void main(String[] args) {
Boolean a = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(true);
System.out.println(a == b); // true(同じインスタンスを再利用)
}
}
資源の節約になる、パフォーマンスがよくなる。
サブタイプのオブジェクトを返せる
返り値の型をインターフェースにして、実装クラスを隠せる。
実装を差し替えてもAPIは変わらない。
パラメータによって異なる型のオブジェクトを返せる
引数の内容に応じて柔軟に返す型を選べる。
生成するクラスが存在しない場合でも返せる
コンストラクタではなく、他のクラスの中で定義された静的メソッドにできる。
欠点もある(補足)
・コンストラクタと違って 継承できない(サブクラス化しにくい)
・new キーワードで作る方法が見えないので、直感的でないことがある

コメント