Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 工厂模式首当其冲_Design Patterns_Factory Pattern - Fatal编程技术网

Design patterns 工厂模式首当其冲

Design patterns 工厂模式首当其冲,design-patterns,factory-pattern,Design Patterns,Factory Pattern,在书中的Head First设计模式中,我不理解PizzaTestDrive类为什么创建SimplePizzaFactory类的对象。为什么PizzaStore类不创建您自己的对象 public class PizzaTestDrive { public static void main(String[] args) { SimplePizzaFactory factory = new SimplePizzaFactory(); PizzaStore s

在书中的Head First设计模式中,我不理解PizzaTestDrive类为什么创建SimplePizzaFactory类的对象。为什么PizzaStore类不创建您自己的对象

public class PizzaTestDrive {

    public static void main(String[] args) {
        SimplePizzaFactory factory = new SimplePizzaFactory();
        PizzaStore store = new PizzaStore(factory);

        Pizza pizza = store.orderPizza("cheese");
        System.out.println("We ordered a " + pizza.getName() + "\n");

        pizza = store.orderPizza("veggie");
        System.out.println("We ordered a " + pizza.getName() + "\n");
    }
}

public class PizzaStore {
    SimplePizzaFactory factory;

    public PizzaStore(SimplePizzaFactory factory) { 
        this.factory = factory;
    }

    public Pizza orderPizza(String type) {
        Pizza pizza;

        pizza = factory.createPizza(type);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

        return pizza;
    }

}

abstract public class Pizza {
    String name;
    String dough;
    String sauce;
    ArrayList toppings = new ArrayList();

    public String getName() {
        return name;
    }

    public void prepare() {
        System.out.println("Preparing " + name);
    }

    public void bake() {
        System.out.println("Baking " + name);
    }

    public void cut() {
        System.out.println("Cutting " + name);
    }

    public void box() {
        System.out.println("Boxing " + name);
    }

    public String toString() {
        // code to display pizza name and ingredients
        StringBuffer display = new StringBuffer();
        display.append("---- " + name + " ----\n");
        display.append(dough + "\n");
        display.append(sauce + "\n");
        for (int i = 0; i < toppings.size(); i++) {
            display.append((String )toppings.get(i) + "\n");
        }
        return display.toString();
    }
}

public class SimplePizzaFactory {

    public Pizza createPizza(String type) {
        Pizza pizza = null;

        if (type.equals("cheese")) {
            pizza = new CheesePizza();
        } else if (type.equals("pepperoni")) {
            pizza = new PepperoniPizza();
        } else if (type.equals("clam")) {
            pizza = new ClamPizza();
        } else if (type.equals("veggie")) {
            pizza = new VeggiePizza();
        }
        return pizza;
    }
}

public class CheesePizza extends Pizza {
    public CheesePizza() {
        name = "Cheese Pizza";
        dough = "Regular Crust";
        sauce = "Marinara Pizza Sauce";
        toppings.add("Fresh Mozzarella");
        toppings.add("Parmesan");
    }
}

public class ClamPizza extends Pizza {
    public ClamPizza() {
        name = "Clam Pizza";
        dough = "Thin crust";
        sauce = "White garlic sauce";
        toppings.add("Clams");
        toppings.add("Grated parmesan cheese");
    }
}


public class PepperoniPizza extends Pizza {
    public PepperoniPizza() {
        name = "Pepperoni Pizza";
        dough = "Crust";
        sauce = "Marinara sauce";
        toppings.add("Sliced Pepperoni");
        toppings.add("Sliced Onion");
        toppings.add("Grated parmesan cheese");
    }
}


public class VeggiePizza extends Pizza {
    public VeggiePizza() {
        name = "Veggie Pizza";
        dough = "Crust";
        sauce = "Marinara sauce";
        toppings.add("Shredded mozzarella");
        toppings.add("Grated parmesan");
        toppings.add("Diced onion");
        toppings.add("Sliced mushrooms");
        toppings.add("Sliced red pepper");
        toppings.add("Sliced black olives");
    }
}
公共类PizzaTestDrive{
公共静态void main(字符串[]args){
SimplePizzaFactory=新的SimplePizzaFactory();
比萨店=新比萨店(工厂);
比萨饼=商店订购比萨饼(“奶酪”);
System.out.println(“我们订购了“+pizza.getName()+”\n”);
比萨饼=商店。订购比萨饼(“素食者”);
System.out.println(“我们订购了“+pizza.getName()+”\n”);
}
}
公营比萨饼店{
Simplepizza工厂;
公共比萨店(SimplePizza工厂){
这个工厂=工厂;
}
公共披萨订单披萨(字符串类型){
披萨;
pizza=factory.createPizza(类型);
比萨饼;
比萨饼;
比萨饼;
比萨饼盒();
返回比萨饼;
}
}
抽象公共类比萨饼{
字符串名;
生面团;
串酱;
ArrayList toppings=新的ArrayList();
公共字符串getName(){
返回名称;
}
公众假期准备(){
System.out.println(“准备”+名称);
}
公共图书馆(){
System.out.println(“烘焙”+名称);
}
公营部门{
System.out.println(“切割”+名称);
}
公共空白框(){
System.out.println(“装箱”+名称);
}
公共字符串toString(){
//显示比萨饼名称和配料的代码
StringBuffer显示=新的StringBuffer();
display.append(“----”+name+“----\n”);
显示。追加(面团+“\n”);
display.append(酱汁+“\n”);
对于(int i=0;i

班上的学生准备了一个比萨饼。SimplePizza工厂选择将要制作的比萨。比萨饼店将比萨饼“出售”给客户。PizzaTestDrive是客户机。

因为作者选择了这种方式进行设计

你可能会把它看成是一家比萨饼店,从工厂得到冷冻比萨饼,然后准备、烘焙、切割和装箱

该设计将制作比萨的责任与名字(比萨工厂就是这样做的)和将比萨煮熟并装箱出售给顾客(比萨商店就是这样做的)分开


比萨饼店可以选择使用另一家fozen比萨饼供应商,这将以不同的方式制作比萨饼。但是比萨饼店的准备、烘焙和装箱工作仍然是一样的。

因为作者选择了这种方式来设计它

你可能会把它看成是一家比萨饼店,从工厂得到冷冻比萨饼,然后准备、烘焙、切割和装箱

该设计将制作比萨的责任与名字(比萨工厂就是这样做的)和将比萨煮熟并装箱出售给顾客(比萨商店就是这样做的)分开

比萨饼店可以选择使用另一家fozen比萨饼供应商,这将以不同的方式制作比萨饼。但比萨饼店的准备、烘焙和装箱工作仍将以同样的方式进行