zoukankan      html  css  js  c++  java
  • 工厂方法模式

    工厂方法模式

    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(接口)
      ➢不要覆 盖基类中已经实现的方法。
  • 相关阅读:
    思路决定出路
    php-异常处理机制
    Win10 IoT 10 中文显示乱码或报错的问题
    Win10 IoT 9 Windows IoT Core扩展开发包
    Win10 IoT 8 GPIO输入输出
    Win10 IoT 7 10586版本的异同
    Win10 IoT 6 设置系统时间
    Win10 IoT 5 修改IP地址
    Win10 IoT 4 远程启动计划任务
    Win10 IoT 3 部署应用
  • 原文地址:https://www.cnblogs.com/junlinsky/p/14067783.html
Copyright © 2011-2022 走看看