参考书籍:JavaScript设计模式
简单工厂模式(传入参数,获取对象)
当你需要什么的时候,只要传入正确的参数,就可以获取你所需要的对象,而无需知道你创建的细节。他有两种创建对象的方式,一种是通过类实例化对象创建,另一种是先创建一个新的对象然后包装增强其属性和方法来实现。通过类创建的对象,如果这些类继承同一个父类,那么他们父类上的原型上的方法是可以共用的。而通过增加属性和方法的方式更像寄生式,这些创建的对象都是一个新的个体,所以他们的方法不能共用。
通过类实例化创建的对象,举个例子,比如说在体育商店买体育器材,里面有很多种类,以及他们相关的介绍等。当你需要一个篮球及其介绍时,你只要问售货员,他就会帮你找到你所需要的东西。
//篮球基类
var Basketball = function () {
this.intro = "basktball";
}
Basketball.prototype = {
getMember: function () {
console.log("5 people")
},
getBallSize: function () {
console.log('big')
}
}
//足球基类
var Football = function () {
this.intro = "football";
}
Football.prototype = {
getMember: function () {
console.log("11 people");
},
getBallSize: function () {
console.log("small")
}
}
//网球基类
var Tennis = function () {
this.intro = "tennis"
}
Tennis.prototype = {
getMember: function () {
console.log("1 people");
},
getBallSize: function () {
console.log("big")
}
}
//工厂
var sportsFactory = function (name) {
switch (name) {
case 'NBA':
return new Basketball();
case 'wordCup':
return new Football();
case 'FrenchOpen':
return new Tennis();
default:
return new Basketball();
}
}
测试
var football = sportsFactory('wordCup');
console.log(football);
var basktball = sportsFactory('NBA');
console.log(basktball);
在上面的例子中,3个基类的结构是相似的,都有一个属性,2个方法,所以我们可以提取共同方法。因此简单工厂模式还可以用来创建相似的对象,对于不相似的地方针对性处理,也就是简单工厂模式另一种实现方式
function sportsFactory(intro) {
//创建一个对象,并且拓展其属性和方法
var o = new Object();
o.intro = intro;
o.getBallSize = function () {
console.log("getBallSize: "+intro);
}
//将对象返回
return o;
}
测试
var football = sportsFactory('football');
console.log(football);
football.getBallSize();
var basktball = sportsFactory('basktball');
console.log(basktball);
basktball.getBallSize();