ファクトリメソッドのメモ

定義

構造

今ピザ屋のオブジェクトがあり、3つのピザのオブジェクトがあります。PizzaA PizzaB PizzaCは、ピザピザのサブクラスでは、少しの食事法をショップです。

public class Pizza {
    void prepare(){
        System.out.println("preparing...");
    }

    void bake(){        
        System.out.println("baking...");
    }

    void cut(){
        System.out.println("cutting...");

    }

    void box(){
        System.out.println("boxing...");

    }
}
public class PizzaA extends Pizza {
    String name="A";
}

public class PizzaB extends Pizza{
    String name="B";

}

public class PizzaC extends Pizza{
    String name="C";
}
public class PizzaStore {
    public static void main(String[] args) {
        PizzaStore store = new PizzaStore();
        Pizza pizza = store.orderPizza("A");
    }
    //点一个Pizza
    public Pizza orderPizza(String type){
        Pizza pizza = null;
        if(type.equals("A"))
            pizza = new PizzaA();
        else if(type.equals("B"))
            pizza = new PizzaB();
        else if(type.equals("C"))
            pizza = new PizzaC();


        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return null;
    }
}


ピザとPizzaStoreクラスは今、緊密に結合され、この方法に描画する新しい文を試してみてください、この方法は、単純な工場です。

package FactoryMethod;

public class PizzaStore {
    public static void main(String[] args) {
        PizzaStore store = new PizzaStore();
        Pizza pizza = store.orderPizza("A");
    }
    public Pizza simpleFactory(String type){
        Pizza pizza = null;
        if(type.equals("A"))
            pizza = new PizzaA();
        else if(type.equals("B"))
            pizza = new PizzaB();
        else if(type.equals("C"))
            pizza = new PizzaC();
        return pizza;
    }
    //点一个Pizza
    public Pizza orderPizza(String type){
        Pizza pizza =simpleFactory(type);

        System.out.println(type);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return null;
    }
}

しかし、この方法は、このクラスにまだある、まだそこに結合され、ファクトリメソッドを達成するためのインタフェースを作成します。
作成した結合新しいオブジェクトが除去されています。

public class PizzaFactory extends  FactoryMethod {
    Object factoryMethod(String type) {
        Pizza pizza = null;
        if (type.equals("A"))
            pizza = new PizzaA();
        else if (type.equals("B"))
            pizza = new PizzaB();
        else if (type.equals("C"))
            pizza = new PizzaC();
        return pizza;
    }
}

public class PizzaStore {
    FactoryMethod factory;
    public static void main(String[] args) {
        PizzaStore store = new PizzaStore();
        Pizza pizza = store.orderPizza("A");
    }

    public PizzaStore(FactoryMethod factory){
        this.factory=factory;
    }
  
    //点一个Pizza
    public Pizza orderPizza(String type){
        Pizza pizza =(Pizza)factory.factoryMethod(type);

        System.out.println(type);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return null;
    }
}

おすすめ

転載: www.cnblogs.com/l1057618497/p/12435788.html