设计模式-策略模式前端应用校验vue写法
1、定义:定义一系列算法,把它们一个个封装起来,并且它们可以相互替换
2、实际应用:减少if else的使用,在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护,提高维护和可读性,具备扩展性
使用案例
优化前写法
if (this.code.length != 16) {
if (this.code.length == 0) {
Toast({
message: '请输入兑换码或者选择扫描兑换码',
position: 'middle',
duration: 3000
})
return false
} else {
Toast({
message: '请输入正确的兑换码',
position: 'middle',
duration: 1500
})
}
} else if (!validateMobile(this.userTel)) {
Toast({
message: '请输入正确的手机号',
position: 'middle',
duration: 1500
})
} else if (this.codeVal.length == 0) {
Toast({
message: '请输入短信验证码',
position: 'middle',
duration: 1500
})
} else if (this.codeVal.length < 4) {
Toast({
message: '请输入正确的短信验证码',
position: 'middle',
duration: 1500
})
}
优化后的写法-采用策论模式+构造函数
我是建一个check.js文件,具体页面引用import { validateCodeFunc } from '@/assets/js/check'
第一步把所有的策略封装起来
const strategys = {
// 空检验
isNotEmpty: (value, errorMsg) => {
if (value === '') return errorMsg
},
// 16位数字code
codeLength: (value, errorMsg) => {
if (!/^\d{16}$/.test(value)) return errorMsg
},
// 4位验证码
verificationCodeLength: (value, length, errorMsg) => {
if (value.length != length) return errorMsg
},
// 手机号
mobileFormat: (value, errorMsg) => {
if (!/^1[3456789]\d{9}$/.test(value)) return errorMsg
}
}
第二步创建调用策略的环境,需要使用那种策略
export function Validator() {
this.cache = [] // 保存效验规则
}
Validator.prototype.add = function(value, rule, errorMsg) {
var str = rule.split(':') // str 返回的是 [verificationCodeLength,4]
this.cache.push(function() {
var strategy = str.shift()// 方法名
str.unshift(value) // value添加进参数列表
str.push(errorMsg) // 把errorMsg添加进参数列表
return strategys[strategy].apply(value, str)
})
}
Validator.prototype.start = function() {
for (var i = 0, validatorFunc; validatorFunc = this.cache[i++];) {
var msg = validatorFunc() // 开始效验 并取得效验后的返回信息
if (msg) {
return msg
}
}
}
第三步最后创建一个Validator实例,在具体页面调用即可
export function validateMobileFunc(params) {
const validator = new Validator()
validator.add(params.userTel, 'isNotEmpty', '请输入手机号')
validator.add(params.userTel, 'mobileFormat', '请输入正确格式的手机号')
validator.add(params.codeVal, 'isNotEmpty', '请输入验证码')
validator.add(params.codeVal, 'verificationCodeLength:4', '请输入正确格式的验证码')
var errorMsg = validator.start()
return errorMsg
}
设计模式-策略模式前端应用校验vue写法的更多相关文章
- 15. 星际争霸之php设计模式--策略模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- [.net 面向对象程序设计深入](24)实战设计模式——策略模式(行为型)
[.net 面向对象程序设计深入](24)实战设计模式——策略模式(行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它 ...
- linkin大话设计模式--策略模式
linkin大话设计模式--策略模式 Strategy [ˈstrætədʒi] 策略 策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以自由的选择任何一种 ...
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ...
- javascript设计模式——策略模式
前面的话 在程序设计中,常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法.这些算法灵活多样,而且可以随意互相替换.这种解决方 ...
- 在商城系统中使用设计模式----策略模式之在spring中使用策略模式
1.前言: 这是策略模式在spring中的使用,对策略模式不了解对同学可以移步在商城中简单对使用策略模式. 2.问题: 在策略模式中,我们创建表示各种策略的对象和一个行为,随着策略对象改变而改变的 c ...
- [转]js设计模式-策略模式
在程序设计中,常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法.这些算法灵活多样,而且可以随意互相替换.这种解决方案就是本文 ...
- 设计模式-策略模式(Strategy Model)
1.概述 在开发过程中常常会遇到类似问题,实现一个功能的时候往往有多种算法/方法(策略),我们可以根据环境的不同来使用不同的算法或策略来实现这一功能. 如在人物比较排序的实现中,我们有 ...
- java设计模式 策略模式Strategy
本章讲述java设计模式中,策略模式相关的知识点. 1.策略模式定义 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户.策略模式属于对象的 ...
随机推荐
- hibernate select查询方式总结
https://www.cnblogs.com/xingege/p/4270990.html
- git版本时提示openssl ssl_read
1.右击git bash here 2.执行 git config --global http.sslVerify "false"
- 2021.08.06 P2441 角色属性树(树形结构)
2021.08.06 P2441 角色属性树(树形结构) P2441 角色属性树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 求离x最近的祖先y且(x,y)>1. ...
- 2021.08.05 P1738 洛谷的文件夹(树形结构)
2021.08.05 P1738 洛谷的文件夹(树形结构) P1738 洛谷的文件夹 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树!! 题意: 给出n个网页路径,求 ...
- python基础练习题(题目 查找字符串。)
day39 --------------------------------------------------------------- 实例061:查找字符串 题目 查找字符串. 分析:查找字符串 ...
- Oracle 数据库表删除重复数据
删除重复数据并保留一条 方法一 1.建立临时表,记录重复的数据 create table 临时表 as select a.字段1,a.字段2,max(a.rowid) as dataid from 原 ...
- Mybatis-Plus入门实践
简介 Mybatis-Plus 简称 MP ,是 Mybatis 的增强工具,提供了一批开箱即用的功能.特性.接口.注解,简化了应用程序访问数据库的相关操作,完善了Mybatis作为ORM仅能做到半自 ...
- go thrift 开发
thrift 从 0.9.1版本开始,可以完美支持 go 语言,可以完美的实现跨语言的 rpc 调用了.下面以 go 和 java 语言相互调用为例. 编辑协议文件,go 语言示例 /** examp ...
- spring4+hibernate4 整合
1.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=" ...
- springMvc和Hibernate集成实现用户添加
源码:http://pan.baidu.com/s/1i4xVLE9(百度云) 步骤:一.创建数据库(mysql) 二.导入相应jar包(注意不同数据库jdbc.jar包)配置web.xml.spri ...