以下就是作者學習中遇到的問題以及代碼實例,最后還給大家關于JS抽象工廠模式的學習做了總結。
抽象工廠模式(Abstract Factory)就是通過類的抽象使得業務適用于一個產品類簇的創建,而不負責某一類產品的實例。
JS中是沒有直接的抽象類的,abstract是個保留字,但是還沒有實現,因此我們需要在類的方法中拋出錯誤來模擬抽象類,如果繼承的子類中沒有覆寫該方法而調用,就會拋出錯誤。
const Car = function() { } Car.prototype.getPrice = function() {return new Error('抽象方法不能調用')}
實現
面向對象的語言里有抽象工廠模式,首先聲明一個抽象類作為父類,以概括某一類產品所需要的特征,繼承該父類的子類需要實現父類中聲明的方法而實現父類中所聲明的功能:
/** * 實現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
上面是我整理給大家的,希望今后會對大家有幫助。
相關文章:
在js中如何實現判斷文件類型大小
在js中如何實現登錄需要滑動驗證
在Angular中如何實現下拉框模糊查詢功能
在Nodejs中有關crypto模塊安全知識(詳細教程)
在angularjs中如何實現分頁和搜索功能
使用vue如何引入ueditor及node后臺配置
在Node.js中如何搭建小程序后臺服務
在js中有關文件加載優化方面的問題
使用nodejs+mongodb+vue如何配置ueditor
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com