欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析JS抽象工廠模式

 更新時間:2017年12月14日 14:09:30   投稿:laozhang  
本篇文章主要給大家總結(jié)了一下作者在學習JS抽象工廠模式時的經(jīng)驗和總結(jié),有興趣的朋友跟著學習下吧。

以下就是作者學習中遇到的問題以及代碼實例,最后還給大家關(guān)于JS抽象工廠模式的學習做了總結(jié)。

抽象工廠模式(Abstract Factory)就是通過類的抽象使得業(yè)務(wù)適用于一個產(chǎn)品類簇的創(chuàng)建,而不負責某一類產(chǎn)品的實例。

JS中是沒有直接的抽象類的,abstract是個保留字,但是還沒有實現(xiàn),因此我們需要在類的方法中拋出錯誤來模擬抽象類,如果繼承的子類中沒有覆寫該方法而調(diào)用,就會拋出錯誤。

const Car = function() { }
Car.prototype.getPrice = function() {return new Error('抽象方法不能調(diào)用')}

實現(xiàn)

面向?qū)ο蟮恼Z言里有抽象工廠模式,首先聲明一個抽象類作為父類,以概括某一類產(chǎn)品所需要的特征,繼承該父類的子類需要實現(xiàn)父類中聲明的方法而實現(xiàn)父類中所聲明的功能:

/**
* 實現(xiàn)subType類對工廠類中的superType類型的抽象類的繼承
* @param subType 要繼承的類
* @param superType 工廠類中的抽象類type
*/
const VehicleFactory = function(subType, superType) {
 if (typeof VehicleFactory[superType] === 'function') {
  function F() {
   this.type = '車輛'
  } 
  F.prototype = new VehicleFactory[superType]()
  subType.constructor = subType
  subType.prototype = new F()        // 因為子類subType不僅需要繼承superType對應的類的原型方法,還要繼承其對象屬性
 } else throw new Error('不存在該抽象類')
}
VehicleFactory.Car = function() {
 this.type = 'car'
}
VehicleFactory.Car.prototype = {
 getPrice: function() {
  return new Error('抽象方法不可使用')
 },
 getSpeed: function() {
  return new Error('抽象方法不可使用')
 }
}
const BMW = function(price, speed) {
 this.price = price
 this.speed = speed
}
VehicleFactory(BMW, 'Car')    // 繼承Car抽象類
BMW.prototype.getPrice = function() {    // 覆寫getPrice方法
 console.log(`BWM price is ${this.price}`)
}
BMW.prototype.getSpeed = function() {
 console.log(`BWM speed is ${this.speed}`)
}
const baomai5 = new BMW(30, 99)
baomai5.getPrice()             // BWM price is 30
baomai5 instanceof VehicleFactory.Car    // true

總結(jié)

通過抽象工廠,就可以創(chuàng)建某個類簇的產(chǎn)品,并且也可以通過instanceof來檢查產(chǎn)品的類別,也具備該類簇所必備的方法。

相關(guān)文章

最新評論