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'; // 判断执行哪一个keyrules[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);}}
