工厂模式——Head First

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂模式——Head First相关的知识,希望对你有一定的参考价值。

所有工厂模式都用来封装对象的创建,这里主要谈论其中的工厂方法模式和抽象工厂模式。

一、定义

工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

二、类图

工厂方法:

技术分享

 

抽象工厂:

技术分享

三、开比萨店

工厂方法:

//Creator
public abstract class PizzaStore {
    //anOperation
    public Pizza orderPizza(String type){
        Pizza pizza;
        pizza=createPizza(type);
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;
    }
    //factoryMethod
    abstract Pizza createPizza(String type);
}

//ConcreteCreator
public class NYPizzaStore extends PizzaStore{
    Pizza createPizza(String item){
        if(item.equals("cheese")){
            return new NYStyleCheesePizza();
        }else if(item.equals("veggie")){
            return new NYStyleVeggiePizza();
        }else if(item.equals("clam")){
            return new NYStyleClamPizza();
        }else if(item.equals("pepperoni")){
            return new NYStylePepperoniPizza();
        }else return null;
    }
}

//Product
public abstract class Pizza {
    String name;
    String dough;
    String sauce;
    ArrayList toppings=new ArrayList();
    void prepare(){
        System.out.println("Preparing"+name);
        System.out.println("Tossing dough");
        System.out.println("Adding sauce...");
        System.out.println("Adding toppings:");
        for(int i=0;i<toppings.size();i++){
            System.out.println(" "+toppings.get(i));
        }
    }
    void bake(){
        System.out.println("Bake for 25 minutes at 350");
    }
    void cut(){
        System.out.println("Cutting the pizza into diagonal slices");
    }
    void box(){
        System.out.println("Place pizza in official PizzaStore box");
    }
    public String getName(){
        return name;
    }
}

//ConcreteProduct
public class NYStyleCheesePizza extends Pizza{
    public NYStyleCheesePizza(){
        name="NY Style Sauce and Cheese Pizza";
        dough="Thin Crust Dough";
        sauce="Marinara Sauce";
        toppings.add("Grated Reggiano Cheese");
    }
}

抽象工厂:

 

以上是关于工厂模式——Head First的主要内容,如果未能解决你的问题,请参考以下文章

Head First设计模式之工厂模式

Head First设计模式——简单工厂工厂抽象工厂

《Head First 设计模式》之工厂模式

Head First 设计模式之工厂模式(Factory Pattern)

《Head first设计模式》之抽象工厂

Head First 设计模式之工厂模式(Factory Pattern)