定义
简单工厂模式:又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例。主要用来创建同一类对象。
如果类太多,就提供一个
对于多个类,在每次创建时还要找相对应的类。为此,直接封装在一个函数中。每次通过这个函数就可以创建我需要的对象为我所用。而且其他人都不用关注创建这些对象到底依赖于哪个基类了。这个函数通常被称为工厂函数,这种模式叫简单工厂模式。
举例
//basketball class
var basketball = function(){
this.intro = 'Basketball from America.';
}
basketball.prototype = {
getMember: function(){
console.log('Every team has five member');
},
getBallSize:function(){
console.log('Basketball is not big');
}
}
//football class
var football = function(){
this.intro = 'Football in the world.';
}
football.prototype = {
getMember: function(){
console.log('Every team has eleven member');
},
getBallSize:function(){
console.log('Football is not big');
}
}
//tennis class
var tennis = function(){
this.intro = 'Tennis in the world.';
}
tennis.prototype = {
getMember: function(){
console.log('Every team has one member');
},
getBallSize:function(){
console.log('Tennis is very samll');
}
}
创建三个类,分别为:basketball,football,tennis。写一个简单的工厂函数。
var SportsFactory = function(name){
switch(name){
case 'NBA':
return new basketball();
case 'worldCup':
return new football();
case 'FrenchOpen':
return new tennis();
}
}
编写函数调用
var Football = SportsFactory('worldCup');
console.log(Football);
console.log(Football.intro);
Football.getMember();
一个对象也可以替代许多类
总的来说,简单模式工厂的理念就是创建对象,上面这种是创建相似对象,也可以用来对不同对象进行实例化。有点类似继承中的寄生模式,但又不太一样,因为这里没有父类,无需做任何的继承。只需要创建一个简单对象,通过这个对象大量拓展方法和属性,最终将对象返回出来。
比如,书都有目录,页码等。也有一些不同的地方:书名,出版时间,出版社等等。
function createBook(name,time,type){
//创建一个简单对象,通过这个对象大量拓展方法和属性
var e = new Object();
e.name = name;
e.time = time;
e.type = type;
e.getName = function(){
console.log(this.name);
}
//return object
return e;
}
var book1 = createBook('Javascript Book',2018,"js");
var book2 = createBook('CSS Book',2014,"css");
book1.getName();
book2.getName();
总结
第一种是通过实例化对象创建的,第二种是通过创建一个对象然后包装增强其属性和功能进行实现。他们之间的差异性造成前面通过类创建的对象,如果这些类继承同一父类,那么父类上的原型方法是可以进行共用的。后面寄生方式创建的对象都是一个新的个体,方法不能共用。
简单工厂只适合于产品对象较少,且产品固定的需求,对于产品变化无常的需求来说显然不合适;