策略+枚举 优雅的消灭 if-else

本文介绍了如何使用策略枚举来优雅地替代大量的if-else语句,提高代码可读性和扩展性。通过一个一周七天备忘功能的需求为例,详细阐述了如何在枚举中应用策略模式,使得每个枚举元素代表一个特定的策略,并通过统一的接口执行不同的行为。同时,文章还提到了如何处理重复功能和扩展新策略的方法。
摘要由CSDN通过智能技术生成

策略+枚举 优雅的消灭 if-else

1、需求举例

假如有这样一个需求,需实现一周七天内分别知道要做事情的备忘功能,这里面就会涉及到一个流程判断,你可能会立马想到用 if-else,那么,可能是会这样实现:

//if-else形式判断
public String getToDo(String day){
   
    if("Monday".equals(day)){
   
        ......省略复杂语句
        return "今天上英语课";
    }else if("Tuesday".equals(day)){
   
        .....省略复杂语句
        return "今天上语文课";
    }else if("Wednesday".equals(day)){
   
        ......省略复杂语句
        return "今天上数学课";
    }else if("Thursday".equals(day)){
   
        ......省略复杂语句
        return "今天上音乐课";
    }else if("sunday".equals(day)){
   
        ......省略复杂语句
        return "今天上编程课";
    }else{
   
        此处省略10086......
    }
}

可能初学者都会忽略掉一点,其实 if-else 是一种面向过程的实现。

那么,如何避免在面向对象编程里大量使用 if-else 呢?

网络上有很多解决思路,有工厂模式、策略模式、甚至是规则引擎(这个太重了吧)…
这些,都有一个共同的缺点,使用起来还是过于繁重了。虽说避免出现过多的 if-else,但是,却会增加很多额外的类,我总觉得,很不实用,只能当做某种模式的学习即可。

可以替换大量的 if-else 语句,且具备较好的可读性与扩展性,同时能显得轻量化,我比较推荐使用策略枚举来消除 if-else。

2、策略枚举

首先,先定义一个 getToDo() 调用方法,假如传进的是“星期一”,即参数"Monday"。

//策略枚举判断
public String getToDo(String day){
   
    CheckDay checkDay=new CheckDay();
    return checkDay.day(DayEnum.valueOf(day));
}

在getToDo()方法里,通过DayEnum.valueOf(“Monday”)可获取到一个DayEnum枚举元素,这里得到的是Monday。

接下来,执行checkDay.day(DayEnum.valueOf(“Monday”)),会进入到day()方法中,这里,通过dayEnum.toDo()做了一个策略匹配时。注意一点,DayEnum.valueOf(“Monday”)得到的是枚举中的Monday,这样,实质上就是执行了Monday.toDo(),也就是说,会执行Monday里的toDo()——

public class CheckDay {
   
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值