小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

工廠方法模式

 印度阿三17 2019-07-25

工廠方法模式

基本介紹

  工廠方法模式設(shè)計方案:將披薩項目的實例化功能抽象成抽象方法,在不同的口味點餐子類中具體實現(xiàn)。

  工廠方法模式:定義了一個創(chuàng)建對象的抽象方法,由子類決定要實例化的類。工廠方法模式將對象的實例化推遲到子類。

應(yīng)用案例

  披薩項目新的需求:客戶在點披薩時,可以點不同口味的披薩,比如?北京的奶酪pizza、北京的胡椒pizza?或者是倫敦的奶酪pizza、倫敦的胡椒pizza

思路1

  使用簡單工廠模式,創(chuàng)建不同的簡單工廠類,比如?BJPizzaSimpleFactory、LDPizzaSimpleFactory?等等。從當前這個案例來說,也是可以的,但是考慮到項目的規(guī)模,以及軟件的可維護性、可擴展性并不是特別好。

思路2

  使用工廠方法模式

思路分析圖解

?

代碼演示

Pizza:所有披薩類的基類,抽象類

BJCheesePizza:北京奶酪披薩

BJPepperPizza:北京胡椒披薩

LDCheesePizza:倫敦奶酪披薩

LDPepperPizza:倫敦胡椒披薩

package com.atguigu.factory.factorymethod.pizzastore.pizza;

/**
 * 將披薩類做成抽象類
 */
public abstract class Pizza {
    protected String name;  // 披薩的名字

    // 準備原材料,不同的披薩是不一樣的,因此,做成抽象方法讓子類來實現(xiàn)
    public abstract void prepare();

    // 烘烤
    public void bake() {
        System.out.println(name   " baking;");
    }

    // 切割
    public void cut() {
        System.out.println(name   " cutting;");
    }

    // 打包
    public void box() {
        System.out.println(name   " boxing;");
    }

    public void setName(String name) {
        this.name = name;
    }
}
Pizza
package com.atguigu.factory.factorymethod.pizzastore.pizza;

public class BJCheesePizza extends Pizza {

    @Override
    public void prepare() {
        setName("北京奶酪披薩");
        System.out.println("北京奶酪披薩 準備原料");
    }
}
BJCheesePizza
package com.atguigu.factory.factorymethod.pizzastore.pizza;

public class BJPepperPizza extends Pizza {
    @Override
    public void prepare() {
        setName("北京胡椒披薩");
        System.out.println("北京胡椒披薩 準備原料");
    }
}
BJPepperPizza
package com.atguigu.factory.factorymethod.pizzastore.pizza;

public class LDCheesePizza extends Pizza {

    @Override
    public void prepare() {
        setName("倫敦奶酪披薩");
        System.out.println("倫敦奶酪披薩 準備原料");
    }
}
LDCheesePizza
package com.atguigu.factory.factorymethod.pizzastore.pizza;

public class LDPepperPizza extends Pizza {
    @Override
    public void prepare() {
        setName("倫敦胡椒披薩");
        System.out.println("倫敦胡椒披薩 準備原料");
    }
}
LDPepperPizza

?

OrderPizza:訂購披薩的抽象類

package com.atguigu.factory.factorymethod.pizzastore.order;

import com.atguigu.factory.factorymethod.pizzastore.pizza.Pizza;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public abstract class OrderPizza {

    // 定義一個抽象方法, createPizza ,讓各個工廠子類自己實現(xiàn)
    abstract Pizza createPizza(String orderType);

    // 構(gòu)造器
    public OrderPizza() {
        Pizza pizza = null;
        String orderType;   // 訂購披薩的類型
        do {
            orderType = getType();
            pizza = createPizza(orderType);     // 抽象方法,由工廠子類完成
            // 輸出 pizza 制作過程
            pizza.prepare();
            pizza.bake();
            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 "";
        }
    }
}
OrderPizza
package com.atguigu.factory.factorymethod.pizzastore.order;

import com.atguigu.factory.factorymethod.pizzastore.pizza.BJCheesePizza;
import com.atguigu.factory.factorymethod.pizzastore.pizza.BJPepperPizza;
import com.atguigu.factory.factorymethod.pizzastore.pizza.Pizza;

public class BJOrderPizza extends OrderPizza {

    @Override
    Pizza createPizza(String orderType) {

        Pizza pizza = null;
        if (orderType.equals("cheese")){
            pizza = new BJCheesePizza();
        } else if (orderType.equals("pepper")){
            pizza = new BJPepperPizza();
        }
        return pizza;
    }
}
BJOrderPizza
package com.atguigu.factory.factorymethod.pizzastore.order;

import com.atguigu.factory.factorymethod.pizzastore.pizza.*;

/**
 * 倫敦訂購披薩
 */
public class LDOrderPizza extends OrderPizza {

    @Override
    Pizza createPizza(String orderType) {

        Pizza pizza = null;
        if (orderType.equals("cheese")){
            pizza = new LDCheesePizza();
        } else if (orderType.equals("pepper")){
            pizza = new LDPepperPizza();
        }
        return pizza;
    }
}
LDOrderPizza
package com.atguigu.factory.factorymethod.pizzastore.order;

/**
 * 測試類
 */
public class PizzaStore {
    public static void main(String[] args) {

        String loc = "bj";
        if (loc.equals("bj")){
            // 創(chuàng)建北京的口味的各種Pizza
            new BJOrderPizza();
        }else {
            // 創(chuàng)建倫敦的口味的各種Pizza
            new LDOrderPizza();
        }
    }
}
PizzaStore

?

來源:https://www./content-4-354001.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約