各ファクトリパターンの比較

factory-comparison.png
Simple-Factory Factory-Method Abstract-Factory
工場は別のクラス
作り方がワンパターンしかない場合にはいいかも
工場はメソッドで、その中身はサブクラスが自由に決めてよい
public class PizzaStore {
    SimplePizzaFactory factory;//ピザ店がシンプルピザ工場への参照を持つ
    //コンストラクタでファクトリを渡す
    public PizzaStore(SimplePizzaFactory factory){
        this.factory=factory;
    }
 
    Pizza orderPizza(String type){
        Pizza pizza = null;
        pizza=factory.createPizza(type);
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;
    } 
}
public abstract class PizzaStore {
    public  Pizza orderPizza(String type){
        Pizza pizza = null;
        pizza=createPizza(type);//工場
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;
    }
    //抽象でファクトリな関数 サブクラスで好きに実装してね★
    abstract Pizza createPizza(String type);
}
public interface PizzaIngredientFactory {
    public Dough createDough();
    public Sauce createSauce();
    public Cheese createCheese();
    public Veggies[] createVeggies();
    public Pepperoni createPepperoni();
    public Clams createClam();
}

サポートサイト Wikidot.com