您的位置:首页 > 其它

设计模式之工厂方法和抽象工厂

2016-06-23 14:45 309 查看
/**
* Created by zengxianwen on 2016/6/13.
*/
console.log('start');
/***工厂方法模式start***/
/**
* 工厂方法模式
@param type
@param content
@returns {Factory}
@constructor
*/
var Factory = function (type,content)
{
if(this
instanceof 
Factory){
var s = new
this
[type](content);
return s;
}else{
return new Factory(type,content);
}
};
Factory.prototype =
{
Java:function (content)
{
console.log('Java--' +
content)
},
Javascript:function (content)
{
console.log('JavaScript--' +
content);
},
UI:function (content)
{
console.log('UI--' +
content);
},
Php:function (content)
{
console.log('Php--' +
content)
}
};
//测试
var data =
[{type:'Javascript',content:'JavaScript
is very good'
},{type:'Java',content:'Java
is very goog'
},{type:'UI',content:'UI
is very good '
},{type:'Php',content:'Php
is very good'
}];
for(var = 0 ; data.length++){
Factory(data[i].type,data[i].content);
};
/***工厂方法模式end***/

/**抽象工厂方法start**/
/**
* 抽象工厂方法
@param subType
@param superType
@constructor
*/
var VehicleFactory = function (subType,superType)
{
if(typeof VehicleFactory[superType]
=== 'function'){
function 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('抽象方法不能调用');
}
};
VehicleFactory.Bus = function ()
{
this.type 'bus';
};
VehicleFactory.Bus.prototype =
{
getPrice:function ()
{
return new Error('抽象方法不能调用');
},
getSpeed:function ()
{
return new Error('抽象方法不能调用');
}
};

VehicleFactory.Truck = function ()
{
this.type 'truck';
};

VehicleFactory.Truck.prototype =
{
getPrice:function ()
{
return new Error('抽象方法不能调用');
},
getSpeed:function ()
{
return new Error('抽象方法不能调用');
}
};

var BMW = function (price,speed)
{
this.price =
price;
this.speed =
speed;
}

VehicleFactory(BMW,'Car');
BMW.prototype.getPrice = function ()
{
return this.price;
};
BMW.prototype.getSpeed = function ()
{
return this.speed;
};

//测试
var bmw new BMW(1000000,1200);
console.log(bmw.getPrice());
console.log(bmw.getSpeed());
console.log(bmw.type);
/**抽象工厂方法start**/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: