第五章(2)抽象工厂

作者: 鹏禾呈 | 来源:发表于2017-09-21 11:25 被阅读0次

抽象工厂模式是设计模式中最抽象的一种,也是创建模式中唯一一种抽象化创建模式。该模式创建出的结果不是一个真实的对象实例,而是一个类簇,它制定了类的结构,这也就区别于简单工厂模式创建单一对象,工厂方法模式创建多类对象。当然由于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

相关文章

网友评论

    本文标题:第五章(2)抽象工厂

    本文链接:https://www.haomeiwen.com/subject/feszsxtx.html