设计模式(四)——工厂方法模式

一、工厂方法模式介绍

      工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。

二、应用

  1. 在简单工厂模式的应用上,用工厂方法模式进一步修改:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐子类中具体实现。
  2. 类图

在这里插入图片描述
3. 代码
1)抽象披萨类

public abstract class Pizza {

    protected String name; //名字

    //准备原材料,不同的披萨不一样,因此,我们做成抽象方法
    public abstract void prepare();

    public void back(){
        System.out.println(name + "backing");
    }

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

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

    public void setName(String name){
        this.name = name;
    }
}

2)具体披萨类,继承抽象类披萨

public class LDPepperPizza extends Pizza{
    public void prepare() {
        setName("伦敦的胡椒pizza");
        System.out.println("伦敦的胡椒pizza 准备原材料");
    }
}

public class LDCheesePizza extends Pizza{
    public void prepare() {
        setName("伦敦的奶酪pizza");
        System.out.println("伦敦的奶酪pizza 准备原材料");
    }
}

public class BJPepperPizza extends Pizza{
    public void prepare() {
        setName("北京的胡椒pizza");
        System.out.println("北京的胡椒pizza 准备原材料");
    }
}
public class BJCheesePizza extends Pizza{
    public void prepare() {
        setName("北京的奶酪pizza");
        System.out.println("北京的奶酪pizza 准备原材料");
    }
}

3)抽象类订单披萨

public abstract class OrderPizza {

    //定义一个抽象方法,createPizza,让各个工厂子类自己实现
    abstract Pizza createPizza(String orderType);

    //构造器
    public OrderPizza(){
        Pizza pizza = null;
        String orderType;//订购披萨的类型
        do{
            orderType = getType();
            pizza = createPizza(orderType);
            //输出pizza制作过程
            pizza.prepare();
            pizza.back();
            pizza.cut();
            pizza.box();
        }while(true);
    }

    //写一个方法,可以获取客户希望订购的披萨种类
    private String getType(){
        try{
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input pizza type:");
            String str = strin.readLine();
            return str;
        }catch (IOException e){
            e.printStackTrace();
            return "";
        }
    }
}

4)具体类订单披萨

public class LDOrderPizza extends OrderPizza{


    Pizza createPizza(String orderType) {
        Pizza pizza = null;
        if(orderType.equals("cheese")){
            pizza = new LDCheesePizza();
        }else if(orderType.equals("pepper")){
            pizza = new LDCheesePizza();
        }

        return pizza;
    }
}

public class BJOrderPizza extends OrderPizza{


    Pizza createPizza(String orderType) {
        Pizza pizza = null;
        if(orderType.equals("cheese")){
            pizza = new BJCheesePizza();
        }else if(orderType.equals("pepper")){
            pizza = new BJPepperPizza();
        }

        return pizza;
    }
}

5)店铺类

public class PizzaStore {

    public static void main(String[] args) {
        new BJOrderPizza();
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章