设计模式(二)工厂模式

设计模式(二)工厂模式

工厂模式是一种十分常见的模式

通过将类似或相同方法的归并,工厂模式可以让代码更简洁,使代码更容易维护,还可以帮助节省很多代码时间和头发

普通的,有如下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');

进行简单的试验

以上就是工厂模式简单的一次运用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值