一起养成写作习惯!这是我参与「掘金日新计划 · 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')
总结
通过对比,我们可以看到经过简单工厂模式的包装,我们的代码会比为包装前有更好的复用性,可读性。下期我们来学习其他新的设计模式。