淺析JS抽象工廠模式
以下就是作者學習中遇到的問題以及代碼實例,最后還給大家關(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)品的類別,也具備該類簇所必備的方法。
- JavaScript設(shè)計模式之工廠模式和抽象工廠模式定義與用法分析
- JavaScript設(shè)計模式之抽象工廠模式介紹
- javascript抽象工廠模式詳細說明
- javascript設(shè)計模式 – 工廠模式原理與應用實例分析
- javascript設(shè)計模式 – 簡單工廠模式原理與應用實例分析
- javascript設(shè)計模式 – 單例模式原理與應用實例分析
- javascript 設(shè)計模式之享元模式原理與應用詳解
- javascript 設(shè)計模式之組合模式原理與應用詳解
- 《javascript設(shè)計模式》學習筆記七:Javascript面向?qū)ο蟪绦蛟O(shè)計組合模式詳解
- 《javascript設(shè)計模式》學習筆記五:Javascript面向?qū)ο蟪绦蛟O(shè)計工廠模式實例分析
- 《javascript設(shè)計模式》學習筆記四:Javascript面向?qū)ο蟪绦蛟O(shè)計鏈式調(diào)用實例分析
- javascript設(shè)計模式 – 抽象工廠模式原理與應用實例分析
相關(guān)文章
js中parseFloat(參數(shù)1,參數(shù)2)定義和用法及注意事項
今天在看jquery時用到了parseFloat(第一個參數(shù),10),對這兩個參數(shù)很是疑惑,于是整理搜集了一下,曬出來與大家分享,希望本文對你有所幫助,感興趣的朋友可以了解下2013-01-01javascript基礎(chǔ)數(shù)據(jù)類型轉(zhuǎn)換教程示例
總結(jié)了javascipt中的數(shù)據(jù)類型之后,我們就了解了,prompt()接收的全是字符串,因此數(shù)據(jù)類型轉(zhuǎn)換就顯得尤為重要,一起來學習一下吧2022-03-03javascript中對Date類型的常用操作小結(jié)
下面小編就為大家?guī)硪黄猨avascript中對Date類型的常用操作小結(jié)。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05