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();          }      }  }

Tags: