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