- 策略模式
- 发布-订阅模式
- 装饰器模式
- 适配器模式
- 代理模式
- 责任链模式
策略模式
一个需求:在登录时判断手机号和密码是否为空、手机号是否正确,一般情况下会反应出如下代码
if(account===null||account===''){alert('手机号不能为空');return false;}if(pwd===null||pwd===''){alert('密码不能为空');return false;}if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(account)) {alert('手机号格式错误');return false;}
那如果还需要判断密码长度就得再加一条
if(pwd.length<6){alert('密码不能小于六位');return false;}
使用策略模式可以这样:
// 声明策略表const strategies = {/*** @param value {any} 需要判断的数据* @param errorMsg {string} 不符合规定的报错信息*/isNonEmpty: function (value, errorMsg) {if (value === '' || value === null) {return errorMsg;}},isMobile: function (value, errorMsg) {if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(value)) {return errorMsg;}},minLength: function (value, length, errorMsg) {if (value.length < length) {return errorMsg;}}};// 使用策略模式,判断各种策略结果,假使获取到 phoneNumber,passwordlet phoneIsNonEmpty = strategies.isNonEmpty(phoneNumber, '手机号不能为空!'),pwdIsNonEmpty = strategies.isNonEmpty(password, '密码不能为空!'),isMobile = strategies.isMobile(phoneNumber, '手机号不正确!'),minLength = strategies.minLength(password, 8, '密码太短!');let errorMsg = phoneIsNonEmpty || pwdIsNonEmpty || isMobile || minLength;if(errorMsg){return errorMsg}
发布-订阅模式
这样一个需求,当我们执行一个操作的时候需要影响到其他操作,比如我们新建一篇文章,需要增加积分、消息通知
