その時に書きたいものを書きます

その時に書きたいものを書くんです

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ファクトリーメソッドのメリット

デメリット

  • publicあるいはprotectedのコンストラクタを持たないクラスのサブクラスを作れない
  • それらが容易に他のstaticメソッドと区別がつかない