設計模式(三)——簡單工廠模式

一、基本介紹
  • 簡單工廠模式是屬於創建型模式,是工廠模式的一種。簡單工廠模式是由一個工廠對象決定創建出哪一種產品的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式。
  • 簡單工廠模式:定義了一個創建對象的類,由這個類來封裝實例化對象的行爲(代碼)。
  • 在軟件開發中,當我們會用到大量的創建某種、某類或者某批對象時,就會使用到工廠模式。
二、 應用
  1. 需求:一個披薩項目,要便於披薩種類的擴展,要便於維護。
    1)披薩的種類很多(比如GreekPizz、CheesePizz等等)
    2)披薩的製作有prepare、bake、cut、box
    3)完成披薩店訂購功能
  2. 類圖
    在這裏插入圖片描述
  3. 代碼
    1)pizza抽象類
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 CheesePizza extends Pizza{

    public void prepare() {
        System.out.println("給製作奶酪披薩準備原材料");
    }
}
public class GreekPizza extends Pizza{

    public void prepare() {
        System.out.println("給希臘披薩準備原材料");
    }
}
public class PepperPizza extends Pizza{

    public void prepare() {
        System.out.println("給胡椒披薩準備原材料");
    }
}

3)披薩工廠類

public class SimpleFactory {

    public Pizza createPizza(String orderType){
        Pizza pizza = null;
        System.out.println("使用簡單工廠模式");
        if(orderType.equals("greek")){
            pizza = new GreekPizza();
            pizza.setName("希臘披薩");
        }else if(orderType.equals("cheese")){
            pizza = new CheesePizza();
            pizza.setName("奶酪披薩");
        }else if(orderType.equals("pepper")){
            pizza = new PepperPizza();
            pizza.setName("胡椒披薩");
        }
        return pizza;
    }
}

4)披薩訂單類

public class OrderPizza {

	//定義一個簡單工廠對象
    public OrderPizza(SimpleFactory simpleFactory){
        setFactory(simpleFactory);
    }
    //定義一個簡單工廠對象
    SimpleFactory simpleFactory;
    Pizza pizza = null;
    public void setFactory(SimpleFactory simpleFactory){
        String orderType = "";//用戶輸入的
        this.simpleFactory = simpleFactory;
        do{
            orderType = getType();
            pizza = this.simpleFactory.createPizza(orderType);
            //輸出pizza
            if(pizza != null){
                pizza.prepare();
                pizza.back();
                pizza.cut();
                pizza.box();
            }else{
                System.out.println("訂購披薩失敗");
                break;
            }
        }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 "";
        }
    }
}

5)店鋪類

//相單于一個客戶端,發出訂購
public class PizzaStore {

    public static void main(String[] args) {
        //new OrderPizza();
        //使用簡單工廠模式
        new OrderPizza(new SimpleFactory());
        System.out.println("退出程序");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章