JS設計模式--Factory(工廠)模式

工廠模式

提供一個通用的接口來建立對象segmentfault

示例設計模式

//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契約(亦稱鴨子類型)的其餘對象的實例對象時。對解耦是頗有用對。

JS設計模式系列文章

JS設計模式之Obeserver(觀察者)模式、Publish/Subscribe(發佈/訂閱)模式
JS設計模式之Factory(工廠)模式
JS設計模式之Singleton(單例)模式
JS設計模式之Facade(外觀)模式
JS設計模式之Module(模塊)模式、Revealing Module(揭示模塊)模式函數

相關文章
相關標籤/搜索