js設計模式第五章 抽象工廠模式 讀書筆記
阿新 • • 發佈:2018-12-03
抽象工廠模式(Abstract Factory) 通過類的抽象使得業務適用於一個產品類簇的建立,而不負責建立某一類產品的例項。
JS中是沒有直接的抽象類的,因此我們需要在類的方法中丟擲錯誤來模擬抽象類,如果繼承的子類中沒有覆寫該方法而呼叫,就會丟擲錯誤。
//汽車抽象類
var Car = function(){};
Car.prototype = {
getPrice: function(){
return new Error( "抽象方法不能直接呼叫" );
}
}
子類繼承父類,如果沒有重寫父類的方法而使用,會報錯。
我們不能使用它來建立一個真實的物件,一般用來作為父類來建立一些子類
var AbstractFactory = function(subType,superType){ //判斷抽象工廠種是否有這個抽象類 if(typeof(AbstractFactory[superType])=='function'){ //快取類 function F(){}; //繼承父類屬性和方法 F.protorype = new AbstractFactory[superType](); //將子類constructor指向子類 subType.constructor = subType; //子類原型繼承"父類" subType.prototype = new F(); }else{ //不存在該抽象類丟擲錯誤 throw new Error('未建立該抽象類'); } } //小汽車抽象類 AbstractFactory.Car = function(){ this.type = 'Car'; } AbstractFactory.Car.prototype = { getPrice : function(){ return new Error('抽象方法不能呼叫!'); } }
抽象工廠其實是一個實現子類繼承父類的方法,在這個方法中我們需要傳入子類以及要繼承父類的名稱。
過渡類的原型繼承,不是繼承父類的原型,而是通過new 複製一個父類的例項,過渡類不僅僅繼承了父類的原型方法,還繼承了父類的物件屬性.
var BMW = function(price){ this.price = price; } //抽象工廠實現對Car抽象類的繼承 AbstractFactory(BMW,'Car'); BMW.prototype.getPrice = function(){ return this.price; } var bmw = new BMW(100000); console.log(bmw.getPrice());
歡迎大神多多指點。qq:274501366