工厂方法模式
工厂方法模式:通过对产品类的抽象使其创建业务主要负责用于创建多类产品实例。
//安全模式创建的工厂类
var Factory = function(type,content){
if(this instanceof Factory){
return new this[type](content);
}else{
return new Factory(type,content)
}
}
//工厂原型中设置创建所有类型数据的基类
Factory.prototype = {
Java:function(content){
//....
},
Javascript:function(content){
}
}
//创建对象
Factory('Java','Java是世界上最好的语言')
抽象工厂模式
抽象工厂模式:通过对类的工厂抽象使其业务用于对产品簇的创建,而不负责创建某一类产品的实例。
1、抽象工厂方法
//抽象工厂方法
var VehicleFactory = function(subType,superType){
if(typeOf VehicleFactory[superType] === 'function'){
//缓存类
function F(){}
//继承父类属性和方法
F.prototype = new VehicleFactory[superType]();
//将子类constructor指向子类
subType.constructor = subType;
//子类原型继承父类
subType.prototype = new F();
}else{
throw new Error('未创建该抽象类')
}
}
2、抽象父类
//小汽车抽象类
VehicleFactory.Car = function(){
this.type = 'car';
}
VehicleFactory.Car.prototype = {
getPrice:function(){
return new Error('抽象方法不能调用');
},
getSpeed:function(){
return new Error('抽象方法不能调用');
}
}
//公交车抽象类
VehicleFactory.Bus= function(){
this.type = 'bus';
}
VehicleFactory.Bus.prototype = {
getPrice:function(){
return new Error('抽象方法不能调用');
},
getSpeed:function(){
return new Error('抽象方法不能调用');
}
}
3、产品子类
//宝马汽车类
var BMW = function(price,speed){
this.price = price;
this.speed= speed;
}
//抽象工厂实现对Car抽象类的继承
VehicleFactory(BWM,'Car');
BMW.prototype.getPrice = function(){
return this.price;
}
BMW.prototype.getSpeed = function(){
return this.speed;
}
var car = new BMW(1111,222);
console.log(car.getPrice())//1111
console.log(car.type) //car