Published on

factoryパターンをラムダ式で

Authors
  • avatar
    Name
    Kikusan
    Twitter

Factoryパターン

Interface

public interface MyIF {
    void hello();
}

実装クラス

public class Impl implements MyIF {
    public void hello() {
        System.out.println("切り替えられる実装処理");
    }
}

Factory

public class Factory {
    public static MyIF create() {
        // 普通何かしら生成を分岐させるけど、ここは固定で実装クラスを返す
        return new Impl();
    }
}

IFを使用するクラス

public class Executor {
    public void execute () {
        System.out.println("事前処理");
        MyIF myif = Factory.create();
        myif.hello();
        System.out.println("事後処理");
    }
}

実行

public class Test {
    public static void main(String[] args) {
        Executor exe = new Executor();
        exe.execute();
    }
}

// 事前処理
// 切り替えられる実装処理
// 事後処理

SupplierでFactoryパターン

Interface

public interface MyIF {
    void hello();
}

実装クラス

public class Impl implements MyIF {
    public void hello() {
        System.out.println("切り替えられる実装処理");
    }
}

IFを使用するクラス

public class Executor {
    public void execute (Supplier<MyIF> supplier) {
        System.out.println("事前処理");
        MyIF myif = supplier.get();
        myif.hello();
        System.out.println("事後処理");
    }
}

実行

public class Test {
    public static void main(String[] args) {
        Executor exe = new Executor();
        // exe.execute(() -> new Impl());
        exe.execute(Impl::new);
    }
}

// 事前処理
// 切り替えられる実装処理
// 事後処理