抽象工廠模式是設(shè)計(jì)模式中最抽象的一種,也是創(chuàng)建模式中唯一一種抽象化創(chuàng)建模式。該模式創(chuàng)建出的結(jié)果不是一個(gè)真實(shí)的對(duì)象實(shí)例蜘腌,而是一個(gè)類簇,它制定了類的結(jié)構(gòu)劣纲,這也就區(qū)別于簡(jiǎn)單工廠模式創(chuàng)建單一對(duì)象逢捺,工廠方法模式創(chuàng)建多類對(duì)象。當(dāng)然由于JavaScript中不支持抽象化創(chuàng)建與虛擬方法癞季,所以導(dǎo)致這種模式不能像其他面向?qū)ο笳Z言中應(yīng)用得那么廣泛劫瞳。
varVehicleFactory=function(subType, superType){
if(typeofVehicleFactory[superType]==='function'){
functionF() {}
F.prototype=newVehicleFactory[superType]();
subType.constructor= subType;
subType.prototype=newF();
}else{
//不存在該抽象類拋出錯(cuò)誤
throw newError('未創(chuàng)建該抽象類');
}
};
VehicleFactory.car=function() {
this.type='car';
};
VehicleFactory.car.prototype={
getPrice:function() {
return newError('抽象方法不能調(diào)用');
},
getSpeed:function() {
return newError('抽象方法不能調(diào)用');
}
};
VehicleFactory.Bus=function() {
this.type='bus';
};
VehicleFactory.Bus.prototype={
getPrice:function() {
return newError('抽象方法不能調(diào)用');
},
getPassengerNum:function() {
return newError('抽象方法不能調(diào)用');
}
}
VehicleFactory.Truck=function() {
this.type='truck';
};
VehicleFactory.Truck.prototype={
getPrice:function() {
return newError('抽象方法不能調(diào)用');
},
getTrainload:function() {
return newError('抽象方法不能調(diào)用');
}
}
//寶馬汽車子類
varBMW=function(price,speed) {
this.price= price;
this.speed= speed;
}
//抽象工廠實(shí)現(xiàn)對(duì)car抽象類的繼承
VehicleFactory(BMW,'car');
BMW.prototype.getPrice=function() {
return this.price;
};
BMW.prototype.getSpeed=function() {
return this.speed
};
varbmwCar=newBMW(1,2);
console.log(bmwCar.getPrice());? ? ? ? ? ? ? ? ?//1