javascript 工厂模式

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 在必须的时候才使用工厂模式,不要滥用

原文地址:https://www.cnblogs.com/oceanxing/p/2890709.html