抽象工厂模式(Abstract Factory):通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责创建某一类产品的实例。
抽象类即定义一个产品簇,并声明一些必备的方法,如果子类没有去重写方法调用时会抛出错误。
抽象类创建的对象是抽象的,所以不能使用它来创建一个真实的对象,一般用它作为父类创建一些子类。
//抽象工厂方法
var VehicleFactory = function(subType,superType){
//判断抽象工厂中是否有该抽象类
if(typeof VehicleFactory[superType] === 'function'){
//缓存类
funtion F() {};
//继承父类属性和方法
F.prototype = new VehicleFactory[superType]();
//将子类构造函数指向子类
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('抽象方法不能调用');
}
}
抽象工厂是用来创建子类的,所以需要一些产品子类,让子类继承相应的产品簇抽象类
//宝马汽车子类
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 Lamborghini = function(price,speed){
this.price = price;
this.speed = speed;
}
//抽象工厂实现对Car抽象类的继承
VehicleFactory(Lamborghini,'Car')
Lamborghini.prototype.getPrice = function(){
return this.price;
};
Lamborghini.prototype.getSpeed = function(){
return this.speed;
}
京公网安备 11010502036488号