美文网首页
工厂方法模式

工厂方法模式

作者: Exception_22bf | 来源:发表于2020-10-30 16:53 被阅读0次
    • 工厂方法模式是一种创建型设计模式,在父类中提供一个创建对象得方法,允许子类决定实列化对象的类型。这种设计模式也是java开发中最常见的一种模式,它的主要意图是定义一个创建对象的接口,让其子类自己决定实列化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
    • 模拟创建汽车功能:在此场景中,我们可以创建奔驰,宝马,凯迪拉克等等。
      • 这里我们先考虑用一坨坨伪代码实现
    public void buildCar(Integer type) {
      if(type.intvalue() == 1) {
          // 创建奔驰
      }
      if(type.intvalue() == 2) {
          // 创建宝马
      }
      if(type.intvalue() == 3) {
          // 创建凯迪拉克
      }
    ......
    }
    
    • 如上就是使用ifelse非常直接写出来业务需求,这样的代码在经历过几次迭代后将变得非常难以维护,下面我们尝试用工厂方法模式进行重构。
    // 先定义一个创建汽车接口
    public interface BuildCar {
      // 创建车的抽象方法
      void build();
    }
    // 定义创建奔驰车的类
    public class BcCar implements BuildCar {
          void build() {
            // 创建奔驰的具体逻辑
            ...
         }
    }
    // 定义创建宝马车的类
    public class BmCar implements BuildCar {
          void build() {
            // 创建宝马的具体逻辑
            ...
         }
    }
    // 定义创建凯迪拉克车的类
    public class KdlkCar implements BuildCar {
          void build() {
            // 创建凯迪拉克的具体逻辑
            ...
         }
    }
    // 创建工厂
    public class CarFactory {
      public BuildCar getBuildCar(Integer type) {
           if(type.intvalue() == 1) {
              return new BcCar();
          }
          if(type.intvalue() == 2) {
              return new BmCar();
          }
          if(type.intvalue() == 3) {
              return new KdlkCar();
          }
        } 
    }
    
    • 当我们使用时:
    CarFactory carFactory = new CarFactory ();
    // 使用工厂类创建奔驰车
    carFactory .getBuildCar(1).build();
    后续同理
    ......
    
    • 这样我们将每个单独的发奖逻辑和主业务剥离出来,满足单一职责,不同的发奖逻辑在属于自己单独的类中实现,满足开闭原则。但这样一来也有一些问题,比如有非常多的奖品类型,那么实现的子类会极速扩张。因此也需要其他的设计模式进行优化,这些会在后续的设计模式中涉及到。

    相关文章

      网友评论

          本文标题:工厂方法模式

          本文链接:https://www.haomeiwen.com/subject/npjdvktx.html