简单工厂模式
简单工厂模式又称 静态工厂方法,由一个对象决定创建某一种产品对象类的实例。主要用来创建同类对象。如果我们存在太多类,而这些类都是属于某种对象类的类簇,可以提供一个简单工厂类。
通过多个类创建一个工厂
有时为了我们对类的管理,我们可以创建一个简单工厂,用来存储这一类簇中的实例,我们需要什么,就直接到工厂里面取什么。
// 举例
var Basketball = function(){
this.intro = '篮球盛行于美国';
}
Basketball.prototype= {
getMember:function(){
console.log('每个队伍需要5名队员');
},
getBallSize: function(){
console.log('篮球很大');
}
}
var Football = function(){
this.intro='足球在世界范围内很流行';
}
Football.prototype = {
getMember:function(){
console.log('每个队伍需要11名队员');
},
getBallSize: function(){
console.log('足球很大');
}
}
var Tennis = function() {
this.intro = '每年有很多网球系列赛';
}
Tennis.prototype = {
getMember:function(){
console.log('每个队伍需要1名队员');
},
getBallSize: function(){
console.log('网球很小');
}
}
// 创建一个运动工厂类
var SportsFactory = function(name) {
switch (name) {
case 'NBA':
return new Basketball();
case 'wordCup':
return new Football();
case 'FrenchOpen':
return new Tennis();
}
}
var football = SportsFactory('wordCup');
console.log(football); // Football {intro: "足球在世界范围内很流行"}
console.log(football.intro); // 足球在世界范围内很流行
football.getMember(); // 每个队伍需要11名队员
通过工厂类创建特定的类
一个对象有时也可代替许多类,简单工厂模式的理念就是创建对象,像上面那种方式是对不同的类实例化,不过除此之外简单工厂模式还可以用来创建相似对象。可以借鉴继承时的寄生模式进行实现。
// 工厂模式
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;
}
var book1 = createBook("js book",2014,"js");
var book2 = createBook("css book",2013,"css");
book1.getName(); // js book
book2.getName(); // css book
总结
第一种是通过类实例化对象创建的,第二种是通过创建一个新对象然后报装增强其属性和功能来实现。他们之间的差异性也造成前面通过类创建的对象,如果这些类继承同一 父类,那么他们的父类原型上的方法可以共用,而后面寄生方式创建的对象都是一个新 的个体,所以他们不能共用。