# 策略模式
# 定义
定义一系列的算法,并且把它们封装起来
# 用途(表单校验)
// 所有校验规则
var strategies = {
isNotEmpty(value, errMsg) {
if (!value) {
return errMsg
}
},
minLength(value, length, errMsg) {
if (!value || value.length < length) {
return errMsg
}
}
}
function Validator() {
// 保存校验规则
this.cache = []
}
Validator.prototype.add = function(val, rule, errMsg) {
var ary = rule.split(":")
this.cache.push(function() {
// ary的长度可能为1,可能为2
var strategy = ary.shift()
ary.unshift(val)
ary.push(errMsg)
// strategies[strategy] 为对应策略
return strategies[strategy].apply(null, ary)
})
}
Validator.prototype.start = function() {
for(var i = 0, validatorFunction; validatorFunction = this.cache[i]; i++) {
var msg = validatorFunction()
if (msg) {
return msg
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40