抽象工廠模式(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