设计模式学习之二 — 迭代器模式

迭代器模式介绍

js内置方法中有很多迭代方法,比如forEach,filter,map,every等,这些迭代器都是对数组中的每一项进行操作。

迭代器模式应用场景

某一件事中,有ABC三种备选方法,依次尝试ABC,如果A不行,就尝试B,如果B不行,就尝试C。按照普通的思路我们会选择用if else方法来解决,但是这样不优雅,相对其中某一项更改时就需要深入到if else方法中进行修改,于是,我们可以使用迭代器模式

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
var A = {
try {
A方法的代码
} catch (e) {
return false; // A方法行不通,返回false
}
};

var B = {
try {
B方法的代码
} catch (e) {
return false; // B方法行不通,返回false
}
};

var C = {
try {
C方法的代码
} catch (e) {
return false; // C方法行不通,返回false
}
};

var resultSolution = function(){
for( var i = 0, fn; fn = arguments[ i++ ]; ){
var theFn = fn();
if( theFn !== false ){
return theFn;
}
}
}

var getTheSolution = resultSolution(A, B, C);

这样,我们就能最后获取到是最终可行的是哪个方法,加入再增加两个方案,就直接在resultSolution(A, B, C)中增加D, E即可,而不用再去写if else;