https://www.cnblogs.com/imwtr/p/9451129.html#o1
简单工厂模式(Simple Factory):又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例。主要用于创建同一类对象。
举例一个简单工厂

//篮球基类
var Basketball = function(){
    this.intro = '篮球盛行于美国'
}
Besketball.prototype = {
    getMember:function(){
        console.log('每个队伍需要5名球员')
    },
    getBallSize(){
        console.log('篮球很大');
    }
} 
//足球基类
var Football = function(){
    this.intro = '足球在世界范围内很流行'
}
Football.prototype = {
    getMember:function(){
        console.log('每个队伍需要11名球员')
    },
    getBallSize(){
        console.log('足球很大');
    }
} 
//网球基类
var Tennis = function(){
    this.intro = '每年有许多网球系列赛'
}
Tennis.prototype = {
    getMember:function(){
        console.log('每个队伍需要1名球员')
    },
    getBallSize(){
        console.log('网球很小');
    }
} 

//运动工厂
var SportsFactory = function(){
    switch(name){
        case 'NBA':
            return new BasketBall();
        case 'worldCup':
            return new FootBall();
        case 'FrenchOpen':
            return new Tennis();
    }
}

//当要使用这几个基类时,只需要记住SportsFactory这个工厂对象即可。
var football = SportsFactory('worldCup');
console.log(football);
console.log(football.intro);
football.getMember();

//相同类似的类可以抽象提取出共用部分,也可以使用简单工厂实现
//第二种实现方式:相同的地方抽取,不同的地方通过传递参数来处理
function createBook(name,time,type){
    //创建一个对象,并对对象拓展属性和方法
    var o = new Object();
    o.name = name;
    o.time = time;
    o.type = type;
    o.getName = function(){
        console.log(this.name);
    };
    //将对象返回
    return o;
}

第一种是通过类实例化对象创造的,第二种是通过创建一个新对象然后包装增强其属性和功能来实现的。差异性也造成前面通过类创建的对象,如果这些类继承同一父类,它们的父类原型上的方法是可以公用的,而后面寄生方式创建的对象都是新的个体,方法并不能共用。