工厂方法模式

工厂方法模式

image-20200729170902167

  • 工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类
public abstract class OrderPizza {

   //定义一个抽象方法,createPizza , 让各个工厂子类自己实现
   abstract Pizza createPizza(String orderType);
   
   // 构造器
   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 种类:");
         String str = strin.readLine();
         return str;
      } catch (IOException e) {
         e.printStackTrace();
         return "";
      }
   }

}
public class PizzaStore {

   public static void main(String[] args) {
      String loc = "bj";
      if (loc.equals("bj")) {
         //创建北京口味的各种Pizza
         new BJOrderPizza();
      } else {
         //创建伦敦口味的各种Pizza
         new LDOrderPizza();
      }
      // TODO Auto-generated method stub
   }

}
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();
      }
      // TODO Auto-generated method stub
      return 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();
      }
      // TODO Auto-generated method stub
      return pizza;
   }

}

小结

  1. 工厂模式的意义
    将实例化对象的代码提取出来,放到-一个类中统一-管理和维护,达到和主项目的依赖关系的解耦。从而提高项目的扩展和维护性。
  2. 三种工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)
  3. 设计模式的依赖抽象原则
    ➢创建对象实例时,不要直接new类,而是把这个new类的动作放在一个工厂的方法中,并返回。有的书上说,变量不要直接持有具体类的引用。
    ➢不要让类继承具体类,而是继承抽象类或者是实现interface(接口)
    ➢不要覆 盖基类中已经实现的方法。
原文地址:https://www.cnblogs.com/junlinsky/p/14067783.html