抽象工厂模式是设计模式中最抽象的一种,也是创建模式中唯一一种抽象化创建模式。该模式创建出的结果不是一个真实的对象实例,而是一个类簇,它制定了类的结构,这也就区别于简单工厂模式创建单一对象,工厂方法模式创建多类对象。当然由于JavaScript中不支持抽象化创建与虚拟方法,所以导致这种模式不能像其他面向对象语言中应用得那么广泛。
varVehicleFactory=function(subType, superType){
if(typeofVehicleFactory[superType]==='function'){
functionF() {}
F.prototype=newVehicleFactory[superType]();
subType.constructor= subType;
subType.prototype=newF();
}else{
//不存在该抽象类抛出错误
throw newError('未创建该抽象类');
}
};
VehicleFactory.car=function() {
this.type='car';
};
VehicleFactory.car.prototype={
getPrice:function() {
return newError('抽象方法不能调用');
},
getSpeed:function() {
return newError('抽象方法不能调用');
}
};
VehicleFactory.Bus=function() {
this.type='bus';
};
VehicleFactory.Bus.prototype={
getPrice:function() {
return newError('抽象方法不能调用');
},
getPassengerNum:function() {
return newError('抽象方法不能调用');
}
}
VehicleFactory.Truck=function() {
this.type='truck';
};
VehicleFactory.Truck.prototype={
getPrice:function() {
return newError('抽象方法不能调用');
},
getTrainload:function() {
return newError('抽象方法不能调用');
}
}
//宝马汽车子类
varBMW=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
};
varbmwCar=newBMW(1,2);
console.log(bmwCar.getPrice()); //1