1. 典型if…else 形式
每个语言的必备语法,写者一时爽,事后被人骂的“面条代码”。这样的代码随着日后需求复杂度增加,极大增加了维护的难度。
if(type1){
dosomeing1()
}else if(type2){
dosomeing2()
}else if(type3){
dosomeing3()
}else{
dosomeing4()
}
2. switch…case 形式
相对if..else更简洁,但是优势不大。
switch(type){
case type1:
dosomeing1();
break;
case type2:
dosomeing2();
break;
case type3:
dosomeing3();
break;
default:
dosomeing4();
}
3. 查找表模式(object 映射)
所谓查找表模式就是指将if…else 的 判断条件及执行的动作 转换为对象的key-value形式。
const rules = {
type1: dosomeing1(),
type2: dosomeing2(),
type3: dosomeing3(),
defaultKey: dosomeing4(),// 都不符合条件的时候执行
}
const key = choiceKey() || 'defaultKey'; // 判断执行哪一个key
rules[key]()
查找表模式比较适合明确知道具体的key值的情况下,否则会增加choiceKey()函数的判断(只是将判断转移了)。
4. 职责链模式
将 if 的判断条件 存储为判断规则,当对应的规则满足时,才会执行对应的action。
const rules = [
{
match: function(a, b){...}
action: function(a, b){ dosomesing1 }
},
{
match: function(a, b){...}
action: function(a, b){ dosomesing2 }
},
{
match: function(a, b){...}
action: function(a, b){ dosomesing3 }
},
{
match: function(a, b){return true} // 都不符合条件的时候执行
action: function(a, b){ dosomesing4 }
}
]
for(let i=0; i<rules.length; i++){
if(rules[i].match(a, b){
return rules[i].action(a, b);
}
}