生成器模式

详情

  • 该模式中有四种角色:
    • 生成器(Builder)
    • 具体生成器(Concreate Builders)
    • 产品(product)
    • 主管(Director)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      //产品
      class Car {
      constructor() {
      console.log('create car')
      }
      }
      class CarManual {
      constructor() {
      console.log('create carManual')
      }
      }
      // 生成器
      abstract class Builder {
      reset()
      setSeats()
      setGPS()
      getProduct()
      }
      // 具体生成器
      class CarBuilder implements Builder {
      constructor() {
      this.reset()
      }
      reset() {
      this.car = new Car()
      }
      setSeats() {
      //
      }
      setGPS() {
      //
      }
      getProduct() {
      let car = this.car;
      this.reset()
      return car
      }
      }
      class CarManualBuilder implements Builder {
      constructor() {
      this.reset()
      }
      reset() {
      this.manual = new CarManual()
      }
      setSeats() {
      //
      }
      setGPS() {
      //
      }
      getProduct() {
      let manual = this.manual
      this.reset()
      return manual
      }
      }
      // 主管
      class Director {
      constructorSportsCar(builder:Builder) {
      builder.reset()
      builder.setSets()
      builder.setGPS()
      }
      constructorSUVCar(builder:Builder) {
      //...
      }
      }

      let director = new Director()

      let carBuilder = new CarBuilder()
      director.constructSportsCar(carBuilder)
      let car = carBuilder.getProduct()

      let carManualBuilder = new CarManulBuilder()
      director.constructorSportsCar(carManualBuilder)
      let manual = carManualBuilder.getProduct()

优缺点

  • 优点:
    • 可以分步创建产品
    • 生成不同产品可以使用类似的代码
    • 可以将复杂的构造代码与产品逻辑分离出来
  • 缺点:
    • 需要新增多个类,复杂度会有所提高