简单工厂模式
简单工厂模式又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例。
直接看情景:
比如一个商店,有篮球,足球,网球,当有顾客去买球的时候,只需要告诉店员,我要一个篮球。它就会给你一个篮球。
// 篮球基类
var Basketball = function() {
this.intro = '这是美国篮球'
}
Basketball.prototype = {
getMember: function() {
console.log('每个队5个人上场');
},
getBallSize: function() {
console.log('篮球很大');
}
}
// 足球基类
var Football = function() {
this.intro = '足球在世界流行'
}
Basketball.prototype = {
getMember: function() {
console.log('每个队11个人上场');
},
getBallSize: function() {
console.log('足球很大');
}
}
// 篮球基类
var Tennis = function() {
this.intro = '每年有很多网球系列赛'
}
Basketball.prototype = {
getMember: function() {
console.log('每个队1个人上场');
},
getBallSize: function() {
console.log('网球很小');
}
}
// 运动工厂
var SportsFactory = function(name) {
switch(name) {
case 'BasketBall':
return new Basketball()
case 'FootBall':
return new Football()
case 'Tennis':
return new Tennis()
}
}
var football = SportsFactory('FootBall')
console.log(football);
console.log(football.intro);
console.log(football.getMember);
这样的话,我们只需要往这个SportFactory工厂函数内输入我们想好的内容就好了,不需要去关注这个具体是来自哪个基类,给我们省去很多时间。
另一方面,一个对象有时可以代替许多类
简单工厂模式的理念就是创建对象 上面那种方式就是对不同的类实例化,除此之外,简单工厂模式还可以用来创建相似对象。这些创建的类和对象都是相似的。形象理解工厂模式,就是一个工厂造出来的,形式都差不多。接下来,看看简单工厂模式如何创建相似对象。
function createBook(name, time, type) {
var book = new Object()
book.name = name
book.time = time
book.type = type
book.getName = function() {
console.log(this.name);
}
// 将对象返回
return book
}
var book1 = createBook('js book', 2016, 'js')
var book2 = createBook('css book', 2011, 'css')
book1.getName()
book2.getName()
傻眼了是不是,这不就是我天天写的代码吗,就这,就这,这就是工厂模式? 没错,这就是工厂模式。
区别
第一种是通过类实例化对象创建的,第二种是通过创建一个新对象然后包装增强其属性和功能类实现的。
它们之间的差异性也造成,前面通过类创建的对象,如果这些类继承自同一父类,那么它们的父类原型上的方法是可以共用的。而后面寄生方式创建的对象都是一个新的个体,所以它们的方法就不能共用了。
当然选择哪种工厂模式来实现你的需求还是要看具体的业务需求。