设计模式(二)工厂模式
工厂模式是一种十分常见的模式
通过将类似或相同方法的归并,工厂模式可以让代码更简洁,使代码更容易维护,还可以帮助节省很多代码时间和头发
普通的,有如下class
class primaryClass{ /*幼儿园小班的一个班级*/
constructor(){
this.name = 'primaryClass';
this.num = 10; /*小班一个班有10人*/
}
numberOff(){ /*小朋友报数*/
let i = this.num;
while(i>0){
let count = this.num-i+1;
console.log(count);
i--;
}
}
}
现有一个一班,是幼儿园小班,并让幼儿园一班的小朋友报数
let classOne = new primaryClass();
classOne.numberOff();
出来的结果是这样的(firefox)
然而幼儿园不止有小班,还有中班和大班,现给出中班和大班的构造方法
class midClass{ /*幼儿园中班的一个班级*/
constructor(){
this.name = 'midClass';
this.num = 9;
/*每个小班的小朋友升中班时,都有一个小朋友因为代码能力不强被劝退了,中班一个班有9人*/
}
numberOff(){ /*小朋友报数*/
let i = this.num;
while(i>0){
let count = this.num-i+1;
console.log(count);
i--;
}
}
}
class highClass{ /*幼儿园大班的一个班级*/
constructor(){
this.name = 'highClass';
this.num = 8;
/*每个中班的小朋友升大班时,都有一个小朋友因为头发不够被劝退了,大班一个班有8人*/
}
numberOff(){ /*小朋友报数*/
let i = this.num;
while(i>0){
let count = this.num-i+1;
console.log(count);
i--;
}
}
}
当我们要多建立几个班级时
let classTwo = new primaryClass();
let classThree = new primaryClass();
let classFour = new midClass();
let classFive = new highClass();
/*每次创建班级都要想一想自己写的class名是什么*/
/*而且如果想要新加一个学前班,还要再添个class,如果想要给每种班级新添属性,要在文档中分别找到这些类才可以进行修改*/
可见,中班和大班的方法与小班所差无几,那么分别书写会使得代码冗余,尤其是当代码量较大时,维护将变得困难,那么我们将其归并起来
- 首先,我们创造一个对象levels,用它来存储不同等级班级的信息
- return的对象中,根据我们传入的参数值来调用levels中的方法,从而达到简化代码的目的
- 共同的方法或相似的方法也可以写在返回的对象中,从而使代码更简洁易懂
- 如果需要班级类型进行增删改,只需要修改levels对象
let kindergarten = (function(level){
/*创建一个对象,储存当前所有类型的班级信息*/
let levels = {
primary(){
this.name = 'primaryClass';
this.num = 10;
},
mid(){
this.name = 'midClass';
this.num = 9;
} ,
high(){
this.name = 'highClass';
this.num = 10;
}
}
return class Kindergarten{
constructor(level){
this.currentLevel = level;
try{
levels[level].call(this);/*设置当前班级的信息,注:call方法立执行*/
} catch(e){
throw new Error('no such class,plese type in primary、mid or high')
}
}
numberOff(){/*共同的方法*/
let i = this.num;
while(i>0){
let count = this.num-i+1;
console.log(count);
i--;
}
}
}
})();
再实例化几个班级
let classOne = new kindergarten('primary');
let classTwo = new kindergarten('primary');
let classThree = new kindergarten('mid');
let classFour = new kindergarten('high');
进行简单的试验
以上就是工厂模式简单的一次运用