设计模式--工厂模式

  1. 工厂模式一定要面向接口编程,将工厂类设计为接口类型,将createPizzaf()方法放在子类中,那么子类进行createPizza方法的具体实现。

  2. 工厂方法模式定义了一个创建对象的接口,但有子类决定要实例化哪一个类。工厂方法模式让实例化推迟到子类。

  3. 工厂模式数据建造者模式中的类创建型。

  4. 工厂模式的UML图

    在这里插入图片描述

  5. 工厂模式是面向接口编程的动态工厂模式。

  6. 工厂方法模式是简单工厂模式的延伸。在工厂方法模式中,核心工厂类不再负责产品的创建,而是将具体的创建工作交给子类去完成。也就是核心工厂仅仅提供创建的接口,具体的实行方法交给继承它的子类去完成。当系统需要增加其他新的对象的时候,只需要添加一个具体的产品和它的创建工厂即可,不需要对原工厂进行任何的修改,也很好的符合了"开闭环原则"。

  7. 工厂模式的优点:

    1. 在工厂方法中,用户只需要知道所需要的产品的具体工厂,无需关心具体的创建过程,甚至不需要具体产品的类名。
    2. 在系统增加新产品的时候,只需要条件一个具体产品类和一个对应的实现工厂,无需对原工厂进行任何修改,很好的符合了"开闭环原则"。
  8. 工厂模式的缺点:

    1. 每次增加产品时都需要新增加一个具体的类和对象实现工厂,使得系统中类的格式成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。
  9. 工厂模式的实现过程

    1. 创建一个抽象类

      /**
       * 抽象产品类
       */
      public abstract class Pizza {
      
          public abstract void prepare();
      
          public abstract void create();
      
          public abstract void complete();
      }
      
      
    2. 创建一个具体类

      /**
       * 蔬菜披萨
       */
      public class PizzaVegg extends Pizza {
      
          @Override
          public void prepare() {
              System.out.println("准备蔬菜");
          }
      
          @Override
          public void create() {
              System.out.println("制作蔬菜");
          }
      
          @Override
          public void complete() {
              System.out.println("制作蔬菜成功");
          }
      
      }
      
    3. 创建抽象工厂类

      /**
       * 抽象工厂类,工厂设计模式的核心思想类(面向接口编程)
       */
      public interface Factory {
      
          Pizza createPizza(String type);
      
      }
      
    4. 创建具体工厂类

      public class PizzaStore1 implements Factory {
      
          public void orderPizza(String type){
              System.out.println("开始预定披萨...类型是"+type);
              Pizza pizza = createPizza(type);
              pizza.prepare();
              pizza.create();
              pizza.complete();
              System.out.println("披萨制作完成...");
          }
      
          /**
           * 不管有多少的披萨种类,都是由自己控制的,如果该店面新加了产品,
           * 只需要修改自己披萨店的代码即可,而不会影响其他披散店的正常运行
           * @param type
           * @return
           */
          @Override
          public Pizza createPizza(String type) {
              Pizza pizza = null;
              if(type.equals("VEGG")){
                  pizza = new PizzaVegg();
              }
              return pizza;
          }
      }
      
  10. 工厂模式的使用场景:

    1. 一个类不知道他所需要的类对象,在工厂方法模式中,不需要知道具体产品的类名,只需要知道创建它的具体工厂即可。
    2. 一个类通过其子类来指定创建的那个对象。在工厂方法模式中,对用抽象工厂类只需要提供一个创建产品的接口,尤其子类来确定具体要创建的对象,在程序运行时,子类将覆盖父类对象,是的系统易扩展。
    3. 将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时无需关心是哪一个工厂子类创建产品子类,需要时在动态指定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值