摘要:抽象類是一種聲明但是不能使用的類,當使用時就會報錯。但是是靈活的,可以在類的方法中手動地拋出錯誤來模擬抽象類。
抽象類是一種聲明但是不能使用的類,當使用時就會報錯。在JavaScript中,abstract還是一個保留字,不能像傳統的面向對象語言那樣輕松創建。但是JavaScript是靈活的,可以在類的方法中手動地拋出錯誤來模擬抽象類。如下:
var Car = function(){}; Car.prototype = { getPrice:function () { return new Error("抽象方法不能調用"); }, getSpeed:function () { return new Error("抽象方法不能調用"); } }
創建的car類什么都不能做,創建時沒有任何屬性,原型的方法也不能使用,但是在繼承時很有用。因為父類定義了一些必要的方法,如果子類沒有重寫這些方法,那么調用時找到這些類就會報錯。
當這些必要的方法從父類繼承過來而沒有具體去重寫實現,那么實例化對象便會調用父類的這些方法,如果父類有友好提示,則對于忘記重寫子類的錯誤的避免就會很有幫助。
抽象工廠實際上是一個實現子類繼承父類的,在這個方法中需要傳遞子類以及要繼承父類的名稱,并且在抽象工廠方法中增加了一次對抽象類存在性的一次判斷,如果存在,則將子類繼承父類的方法,然后子類通過寄生式繼承。
抽象工廠方法
var VehicleFactory = function (subType,superType) { //判斷抽象工廠是否有該抽象類 if(typeof VehicleFactory[superType] === "function"){ //緩存類 function F() {}; //繼承父類屬性和方法 F.prototype = new VehicleFactory[superType](); //將子類constructor指向子類 subType.constructor = subType; //子類原型繼承"父類” subType.prototype = new F(); }else { //不存在該抽象類拋出錯誤 throw new Error("未創建該抽象類"); } }
抽象類
//小汽車抽象類 VehicleFactory.Car = function () { this.type = "Car"; }; VehicleFactory.Car.prototype = { getPrice:function () { return new Error("抽象方法不能調用"); }, getSpeed:function () { return new Error("抽象方法不能調用"); } } //貨車抽象類 VehicleFactory.Truck = function () { this.type = "Truck"; }; VehicleFactory.Truck.prototype = { getPrice:function () { return new Error("抽象方法不能調用"); }, getSpeed:function () { return new Error("抽象方法不能調用"); } }
抽象工廠實現對抽象類的繼承
//寶馬汽車子類 var BMW = function (price,speed) { this.price = price; this.speed = speed; } //抽象工廠實現對Car抽象類的繼承 VehicleFactory(BMW,"Car"); BMW.prototype.getPrice = function () { return this.price; } BMW.prototype.getSpeed = function () { return this.speed; } //奔馳汽車子類 var BenzTruck = function(price,trainLoad){ this.price = price; this.trainLoad = trainLoad; } //抽象工廠實現對Truck抽象類的繼承 VehicleFactory(BenzTruck,"Truck") BenzTruck.prototype.getPrice = function () { return this.price; } BenzTruck.prototype.getTrained = function () { return this.trainLoad; }
通過抽象工廠,就知道每個子類到底是哪一種類別,然后它們也具有了該類所必備的屬性和方法了。
測試
//測試 var truck = new BenzTruck(1000,100); console.log(truck.getPrice());//1000 console.log(truck.type);//Truck var car = new BMW(10,5); console.log(car.getPrice());//10 console.log(car.getSpeed());//5
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/98037.html
摘要:基于工廠角色和產品角色的多態性設計是工廠方法模式的關鍵。工廠方法模式之所以又被稱為多態工廠模式,是因為所有的具體工廠類都具有同一抽象父類。工廠方法模式總結工廠方法模式是簡單工廠模式的進一步抽象和推廣。 JavaScript工廠模式 首先需要說一下工廠模式。工廠模式根據抽象程度的不同分為三種 簡單工廠模式 工廠方法模式 抽象工廠模式 1.簡單工廠模式 簡單工廠模式:又稱為靜態工廠方法...
摘要:前言接下來將會為大家介紹設計模式中的創建型設計模式,在此之前需要掌握一定的對象繼承基礎。但是如果是工廠方法模式的話,則只需要往工廠方法中添加基類則可以。 前言 接下來將會為大家介紹設計模式中的創建型設計模式,在此之前需要掌握一定的JavaScript對象繼承基礎。 簡單工廠模式 先說說 什么是簡單工廠模式:又叫靜態工廠方法,由一個工廠對象決定創建某一種產品對象類的實例 看著定義有點懵,...
摘要:簡單工廠模式簡單工廠模式又叫靜態工廠模式,由一個工廠對象決定創建某一種產品對象類的實例。工廠方法模式工廠方法模式的本意是將實際創建對象的工作推遲到子類中,這樣核心類就變成了抽象類。抽象工廠模式一般用在 1 什么是工廠模式? 工廠模式是用來創建對象的一種最常用的設計模式。我們不暴露創建對象的具體邏輯,而是將將邏輯封裝在一個函數中,那么這個函數就可以被視為一個工廠。工廠模式根據抽象程度的不...
摘要:簡單工廠模式簡單工廠模式又叫靜態工廠模式,由一個工廠對象決定創建某一種產品對象類的實例。工廠方法模式工廠方法模式的本意是將實際創建對象的工作推遲到子類中,這樣核心類就變成了抽象類。抽象工廠模式一般用在 1 什么是工廠模式? 工廠模式是用來創建對象的一種最常用的設計模式。我們不暴露創建對象的具體邏輯,而是將將邏輯封裝在一個函數中,那么這個函數就可以被視為一個工廠。工廠模式根據抽象程度的不...
閱讀 955·2023-04-25 23:54
閱讀 3036·2021-11-08 13:21
閱讀 3759·2021-09-27 13:35
閱讀 3381·2021-07-26 23:41
閱讀 1043·2019-08-30 15:52
閱讀 3431·2019-08-30 11:27
閱讀 2088·2019-08-29 18:37
閱讀 528·2019-08-29 17:24