JavaScript设计模式1一简单工厂模式

210 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

什么是简单工厂模式?

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。——百度百科

为什么使用简单工厂模式?

有这样一个需求:关于表单验证的用户名输入是否合法,如果不合法就弹出一个警示框,告知合法用户名的规则。可能我们很快就能写出一份警示框的代码。

let AdminAlert = function(data){
    this.content = data
}
AdminAlert.prototype.alertModal = function(){
    //警示框代码逻辑...
}
let userNameAlert = new AdminAlert('用户名输入不合法,正确用户名应符合xxx规则')
userNameAlert.alertModal()

哦,对了,密码警示框还没写,那赶紧把密码的警示框也补上:

let userPasswordAlert = new AdminAlert('密码输入不合法,请根据xxx规则输入密码')
userPasswordAlert.alertModal()

当我们开开心心写完准备摸鱼时,产品告诉我们用户名需要自定义弹框,添加一个随机生成符合规则的用户名按钮。哦吼,完蛋,密码和用户名不是同一套规则了,那赶紧再写一套吧:

let RandomAlert = function(){
    this.content = data
}
RandomAlert.prototype.alertModal = function(){
    //随机生成代码逻辑...
}
let userNameAlert = new AdminAlert('用户名输入不合法,正确用户名应符合xxx规则,请重新输入或点击按钮随机生成')
userNameAlert.alertModal()

到这一步相信大家伙都看出问题了,对,代码中有重复逻辑了,两个还好,如果是三个,五个就会让我们的代码很繁琐了,这时候就需要请出我们今天的主角——简单工厂模式 了

function formAlert(type,data){
    let obj = {}
    obj.content = data
    obj.show = function(){
        //警示框如何显示逻辑...
    }
    switch (type) {
       case 'alert'
           //警示框独有逻辑...
           break
       case 'random':
           //随机生成独有逻辑...
       
       ...
       
       default:
           //默认逻辑...
           break
    }
    return obj
}
let userPasswordAlert = formAlert('alert','密码输入不合法,请根据xxx规则输入密码')
let userNameAlert = formAlert('random','用户名输入不合法,正确用户名应符合xxx规则,请重新输入或点击按钮随机生成')
let otherAlert = formAlert('other','xxx')

总结

通过对比,我们可以看到经过简单工厂模式的包装,我们的代码会比为包装前有更好的复用性,可读性。下期我们来学习其他新的设计模式。