トップページ > コンテンツ > プログラミング効率化 > プログラムを作る上での考え方 > デザインパターン > FactoryMethod

■メリット
あるクラスを使うエンドユーザは、そのクラスがどのクラスと相関があるかを覚えてくれているので、
意識することなく使える。

■実装例
/*User.java*/
public class User {
    public static void main(String[] args) {
        Factory factory = new ConcreteFactory(); //ConcreteFactory側で、どのクラスをペアにするか把握しているため、利用者側で意識する必要がない。
        factory.what_factory();
        Product product = factory.factoryMethod();
        product.method();
    }
}

/*Factory.java*/
public abstract class Factory {
    public abstract void what_factory(); //分かりやすさのため追加。
    public abstract Product factoryMethod(); //FactoryMethod本体
}

/*Product.java*/
public abstract class Product {
    public abstract void method(); //商品ごとに振る舞いを変えて欲しい機能
}

/*ConcreteFactory.java*/
public class ConcreteFactory extends Factory{
    public void what_factory() {
        System.out.println("このFactoryはConcreteProductAとの関係があります");
    }
    public Product factoryMethod(){
        return new ConcreteProductA(); //Factory自身はどのクラスと関係があるかを把握している。ProductやUserは知らなくてOK。何を返すのかを分岐させたりすることもできる。
    }
}

/*ConcreteProductA.java*/
public class ConcreteProductA extends Product{
    public void method(){
        System.out.println("productAの機能です");
    }
}
最終更新:2021年07月07日 12:33