1.JavaScript工厂模式
虽然使用 Object 构造函数或对象字面量可以方便地创建对象,但这些方式也有明显不足:创建具有同样接口的多个对象需要重复编写很多代码。
1.1.什么是工厂模式?
工厂模式是一种众所周知的设计模式,广泛应用于软件工程领域,用于抽象创建特定对象的过程。工厂模式是一种创建型模式,简单来说,工厂模式就是创建对象的一种方式。
1.2.工厂模式有什么用?
作用:创建对象;降低代码冗余度。
应用场景:当你想要批量生产同种类的对象的时候;比如,你想生成一个班级的40个学生,每个学生都有姓名、年龄等特征。这时候你创建一个“工厂”,把信息丢到工厂里,工厂就给你造一个人出来,非常方便。
1.3.为什么用工厂模式?
从工厂模式的作用出发来看,工厂模式的主要作用就是用来产生对象的。那么别的创建对象的模式有什么缺点?
a.用字面量的方式创建对象
字面量就是用来描述变量的;一般来说,给变量赋值的时候,等号右边的都可以看作是字面量(因为等号右边的都是用来描述这个变量的,比如描述一个变量为字符串(字符串字面量)、一个数组(数组字面量)、一个对象(对象字面量),等等)。
var person = {
name:'zhangsan',
age:19,
gender:'male',
sayName:function(){
console.log(this.name);
}
}
缺点:用字面量的方式来创建对象,最大的缺点就是,这个对象是一次性的,如果有很多个同学,我们就要写很多次,就会很麻烦。
b.new Object()创建对象
Object是JavaScript提供的构造函数;new Obeject()就是李彤JavaScript缇欧功德构造函数式实例了一个对象;
var person = new Object();
person.name=name;
person.age=age;
person.gender='male';
person.sayName:function(){
console.log(this.name);
}
缺点:可以发现它是先实例化了一个对象,然后再为对象添加属性,这样就看不出来是个整体(像上面的字面量来创建,属性都包在一个大螺号里面,这样就很好看出是一个整体)。
因此,我们是为了使创建对象更加方便(不像字面量创建那样一次性),也为了写的代码更像个整体,就可以交给工厂模式来做。
1.4使用工厂模式创建对象
function createPerson(name,age,gender){
var Person = new Object();
person.name = name;
person.age = age;
person.gender = gender;
person.sayName:function(){
console.log(this.name);
}
return person;
}
//利用工厂函数来创建对象
var person1 = createPerson("zhangsan", 18, 'male');
var person2 = createPerson("lisi", 20, 'female');
优点:大量创建函数,封装代码,提高代码复用率;
缺点:区分不出对象种类,方法冗余。