1 简单工厂模式
var CarFactory = function(){};
CarFactory.prototype= {
createCar: function(type){
var car= null;
switch(type){
case 'ford': car= new Ford();break;
case 'jetta': car= new Jetta();break;
default: car= new Lancer();
}
}
}
var CarShop = new function(){}
CarShop.prototype = {
sellCar: function(type){
var car = new CarFactory().createCar(type);
car.made();
car.wash();
return car;
}
}
2 抽象工厂模式
汽车制造厂不可能制造所有的汽车,汽车店也不可能卖所有的汽车。但是卖车的流程(本人不清楚卖车流程,sellCar方法只是假设)是一样的。怎么办,上面的简单工厂模式显然不适合。
由于制造汽车各不相同,createCar变成一个抽象方法。
var CarShop = function(){}
CarShop.prototype= {
createCar: function(type){
throw new Error("Unsupported operation on an abstract class.");
},
sellCar: function(type){
var car = this.createCar(type);
car.made();
car.wash();
return car;
}
}
//丰田汽车店,只卖丰田汽车
var ToyotaShop = function (){};
//继承CarShop
ToyotaShop.prototype = new CarShop();
ToyotaShop.prototype.createCar = function(type){
var car = null;
switch(type){
case 'vios': car = new Vios();break;
case 'yaris': car = new Yaris();break;
case 'corolla': car = new Corolla();break;
default: car = new Crown();
}
return car;
}
//比亚迪汽车点
...
不同的汽车店继承CarShop,然后实现自己的createCar方法。
3 工厂模式的使用场景
3.1 有相同接口,但是不同实现的类
3.2 把很多小类,聚合到一个大类,减少代码重复。高内聚低耦合。
3.3 在运行时,可以动态选择用什么类
3.4 在必须的时候才使用工厂模式,不要滥用