1. 典型if…else 形式

每个语言的必备语法,写者一时爽,事后被人骂的“面条代码”。这样的代码随着日后需求复杂度增加,极大增加了维护的难度。

  1. if(type1){
  2. dosomeing1()
  3. }else if(type2){
  4. dosomeing2()
  5. }else if(type3){
  6. dosomeing3()
  7. }else{
  8. dosomeing4()
  9. }

2. switch…case 形式

相对if..else更简洁,但是优势不大。

  1. switch(type){
  2. case type1:
  3. dosomeing1();
  4. break;
  5. case type2:
  6. dosomeing2();
  7. break;
  8. case type3:
  9. dosomeing3();
  10. break;
  11. default:
  12. dosomeing4();
  13. }

3. 查找表模式(object 映射)

所谓查找表模式就是指将if…else 的 判断条件及执行的动作 转换为对象的key-value形式。

  1. const rules = {
  2. type1: dosomeing1(),
  3. type2: dosomeing2(),
  4. type3: dosomeing3(),
  5. defaultKey: dosomeing4(),// 都不符合条件的时候执行
  6. }
  7. const key = choiceKey() || 'defaultKey'; // 判断执行哪一个key
  8. rules[key]()

查找表模式比较适合明确知道具体的key值的情况下,否则会增加choiceKey()函数的判断(只是将判断转移了)。

4. 职责链模式

将 if 的判断条件 存储为判断规则,当对应的规则满足时,才会执行对应的action。

  1. const rules = [
  2. {
  3. match: function(a, b){...}
  4. action: function(a, b){ dosomesing1 }
  5. },
  6. {
  7. match: function(a, b){...}
  8. action: function(a, b){ dosomesing2 }
  9. },
  10. {
  11. match: function(a, b){...}
  12. action: function(a, b){ dosomesing3 }
  13. },
  14. {
  15. match: function(a, b){return true} // 都不符合条件的时候执行
  16. action: function(a, b){ dosomesing4 }
  17. }
  18. ]
  19. for(let i=0; i<rules.length; i++){
  20. if(rules[i].match(a, b){
  21. return rules[i].action(a, b);
  22. }
  23. }

5多个key 对应同一个处理方法

https://www.cnblogs.com/pqjwyn/p/10247336.html