Java設計模式-工廠方法模式
- 2020 年 3 月 17 日
- 筆記
基本介紹
工廠方法模式:定義了一個創建對象的抽象方法,由子類決定要實例化的類。工廠方法模式將對象的實例化推遲到子類
需求說明
1)披薩的種類:如北京的乳酪pizza、北京的呼叫pizza或者是倫敦的乳酪pizza、倫敦的胡椒pizza
2)披薩的製作過程包括:prepare、bake、cut、box 3)完成披薩店訂購功能
UML圖

程式碼
// Pizza 抽象類 public abstract class Pizza { protected String name; 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; } }// BJCheesePizza類繼承Pizza public class BJCheesePizza extends Pizza { @Override public void prepare() { setName("BJCheesePizza"); System.out.println("BJCheesePizza 準備原材料"); } }// BJPepperPizza類繼承Pizza類 public class BJPepperPizza extends Pizza { @Override public void prepare() { setName("BJPepperPizza"); System.out.println("BJPepperPizza 準備原材料"); } }// LDCheesePizza 類繼承Pizza public class LDCheesePizza extends Pizza { @Override public void prepare() { setName("LDCheesePizza"); System.out.println("LDCheesePizza 準備原材料"); } }// LDPepperPizza 類繼承Pizza public class LDPepperPizza extends Pizza { @Override public void prepare() { setName("LDPepperPizza"); System.out.println("LDPepperPizza 準備原材料"); } }// OrderPizza抽象類 public abstract class OrderPizza { abstract Pizza createPizza(String orderType); public OrderPizza(){ Pizza pizza = null; String orderType; do{ orderType = getType(); pizza = createPizza(orderType); 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 : "); String str = strin.readLine(); return str; } catch (IOException e) { e.printStackTrace(); return ""; } } }// BJOrderPizza 類繼承OrderPizza並實現createPizza()方法 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; } }// LDOrderPizza類繼承OrderPizza 並實現createPizza()方法 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 LDPepperPizza(); } return pizza; } }//PizzaStore類 public class PizzaStore { private static String getCountryName(){ try{ BufferedReader strin = new BufferedReader(new InputStreamReader(System.in)); System.out.println("input CountryName : "); String str = strin.readLine(); return str; } catch (IOException e) { e.printStackTrace(); return ""; } } public static void main(String[] args) { String loc = getCountryName(); if(loc.equals("bj")){ new BJOrderPizza(); }else { new LDOrderPizza(); } } }
