JS工厂模式

摘要:提供一个通用的接口来创建对象,适用场景;当对象或组建设置涉及高复杂性时;当需要根据所在当不同环境轻松生成对象当不同实例时;当处理很多共享相同属性当小型对象或组件时

提供一个通用的接口来创建对象

示例

  //Car构造函数
  function Car(option) {
    this.doors = option.doors || 4
    this.color = option.color || 'red'
    this.state = option.state || 'brand new'
  }

  //Truck构造函数
  function Truck(option) {
    this.color = option.color || 'blue'
    this.wheelSize = option.wheelSize || 'large'
    this.state = option.state || 'used'
  }

  //Vehicle工厂
  function VehicleFactory() {}

  VehicleFactory.prototype.vehicleClass = Car
  VehicleFactory.prototype.createVehicle = function(option) {
    if(option.vehicleType == 'car') {
      this.vehicleClass = Car
    }else {
      this.vehicleClass = Truck
    }

    return new this.vehicleClass(option)
  }

  //创建生成汽车的工厂实例
  var carFactory = new VehicleFactory()
  var car = carFactory.createVehicle({
    vehicleType: 'car',
    color: 'yellow',
    doors: 6
  })

  console.log(car instanceof Car)
  console.log(car)
  //true
  //Car {doors: 6, color: "yellow", state: "brand new"}

  var movingTruck = carFactory.createVehicle({
    vehicleType: 'truck',
    color: 'red',
    state: 'like new',
    wheelSize: 'small'
  })

  console.log(movingTruck instanceof Truck)
  console.log(movingTruck)
  //true
  //Truck {color: "red", state: "like new", wheelSize: "small"}


适用场景

  • 当对象或组建设置涉及高复杂性时
  • 当需要根据所在当不同环境轻松生成对象当不同实例时
  • 当处理很多共享相同属性当小型对象或组件时
  • 在编写只需要满足一个API契约(亦称鸭子类型)的其他对象的实例对象时。对解耦是很有用对。


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_2320