if-else还是switch及策略模式

本文探讨了在编程中选择if-else与switch的条件判断,以及何时采用策略模式。当条件较少时,if-else或switch可能更适用,而随着条件增多,策略模式展现出优势,通过封装不同的处理逻辑,提高了代码的可读性和可扩展性。文中以年终奖金发放为例,展示了如何使用策略模式避免复杂的条件分支,实现更灵活的业务逻辑处理。
摘要由CSDN通过智能技术生成

首先,条件判断到底是该用if-else还是switch,似乎是所有编程语言都存在的讨论。

// if语句:
if ( val == 0) {
    // 对于0的相关处理
} else if(val == 1) {
    // 对于1的相关处理
} else if( val == 2) {
    // 对于2的相关处理
} else {
    // 对于其他情况的相关处理
}


// switch语句:
switch(val) {
    case 0: 
         // 对于0的相关处理
         break;
    case 1:
         // 对于1的相关处理
         break;
    case 2: 
        // 对于2的相关处理
        break;
    default:
        // 对于其他情况的相关处理     
}

如果只有一两个条件的判断,通常if-else处理条件的时间会比switch更快,当判断条件多到两个以上时,在大多数情况下,switch处理单个条件的时间比if-else更快,所以switch更加适合。

策略模式:定义一系列的处理流程或算法,把他们分别封装起来,使得他们可以相关替代。目的就是将算法的使用和实现分离,避免出现大量if...else或者switch...case。

一个具体的场景为例,假设年底公司要根据员工的绩效等级发放奖金,绩效考核为S的是4个月工资,A的是3个月工资,B的是2个月工资,C的是1个月工资。

if-else实现方式如下:

function calculateBonus(salary, level) {
    if(level === 'S') {
        return salary * 4;
    } else if(level === 'A') {
        return salary * 3;
    } else if(level === 'B') {
        return salary * 2;
    } else if(level === 'C') {
        return salary * 1;
    }
}

策略模式的实现方式如下:

const bonusWay = {
    "S": (salary) => sallary * 4,
    "A": (salary) => sallary * 3,
    "B": (salary) => sallary * 2,
    "C": (salary) => sallary * 1,
}

function calculateBonus(salary, level) {
    return bonusWay[level](salary)
}

策略模式很好地利用了组合、委托及多态等技术思想,有效地避免了类似if-else等多种功能条件选择语句。同时它完美支持了开放——封闭原则,将处理算法封装在独立的策略中,易于理解、切换和扩展。

对于条件判断的使用建议:

  • 当匹配的条件仅为一两个离散值时,或者容易划分不同取值范围时,使用if-else语句。
  • 当匹配的条件超过一两个但少于十个值时,使用swtich语句。
  • 当匹配的条件超过十个值时,使用策略模式。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值