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