staticファクトリーメソッド
オブジェクトの提供者は、コンストラクタだけではない。 staticなメソッドでオブジェクトを返すようにする方法もある。 コンストラクタでのオブジェクト提供を無意識に行わないよう注意。
StaticFactoryMethod.java
package test; public class StaticFactoryMethod { private static StaticFactoryMethodImplA implA = new StaticFactoryMethodImplA(); private static StaticFactoryMethodImplB implB = new StaticFactoryMethodImplB(); public static IStaticFactoryMethod getStaticFactoryMethod(int num){ if (num <= 64){ return implA; }else{ return implB; } } @Override public String toString(){ return "StaticFactoryMethodクラスです"; } } //インターフェイス interface IStaticFactoryMethod { public String getName(); } //実装クラス class StaticFactoryMethodImplA implements IStaticFactoryMethod{ @Override public String getName() { return "IStaticFactoryMethod実装クラスA"; } } //実装クラス class StaticFactoryMethodImplB implements IStaticFactoryMethod{ @Override public String getName(){ return "IStaticFactoryMethod実装クラスB"; } }
Main.java
package test; public class Main { public static void main(String[] args) { IStaticFactoryMethod impl = StaticFactoryMethod.getStaticFactoryMethod(63); System.out.println(impl.getName() + "デェス"); } }
staticファクトリーメソッドのメリット
- コンストラクタと異なり、名前を持つ
- コンストラクタと異なり、メソッドが呼び出されるごとに新たなオブジェクトを生成する必要がない
- コンストラクタと異なり、メソッドの戻り値型の任意のサブタイプのオブジェクトでも返すことができる
- パラメータ化された型のインスタンス生成の面倒さを低減する
デメリット