高质量代码之表驱动法

本文借鉴《编写高质量的C#代码:改善C#程序的157个建议》,算是对自己学习的总结,也希望分享下所学知识~~

随着开发,经常遇到很长的 if 和 switch 分支。
比如:

enum EWeek
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

private string GetChineseWeek(EWeek week)
{
    switch (week)
    {
        case EWeek.Monday:
            return "星期一";
        case EWeek.Tuesday:
            return "星期二";
        case EWeek.Wednesday:
            return "星期三";
        case EWeek.Thursday:
            return "星期四";
        case EWeek.Friday:
            return "星期五";
        case EWeek.Saturday:
            return "星期六";
        case EWeek.Sunday:
            return "星期日";
        default:
            throw new ArgumentOutOfRangeException();
    }
}

这个丑陋的方法,就是把 EWeek 的元素值用中文输出。

缺点
1.分支过长,出现重复代码。
2.不利于扩展。

解决方案:
1.使用多态,符合开闭原则,不修改原有代码,直接修改子类。
2.使用 表驱动法
如下:

private string GetChineseWeekInTable(EWeek week)
{
    string[] chineseWeek = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };
    return chineseWeek[(int)week];
}

这是一种按照索引值驱动的表驱动法。
枚举元素的整型值与数字索引组合起来。

同时也有一定局限性,在满足不了需求的情况下,再用多态!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值