高质量代码之表驱动法

本文借鉴《编写高质量的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];
}

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,090评论 0 13
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,170评论 1 32
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,494评论 0 9
  • 第一部分 打好基础 Laying the Foundation 第一章 欢迎进入软件构建的世界 Welcome t...
    白桦叶阅读 4,736评论 0 17
  • 在父母面前,孩子永远是孩子,他们说出的趣话,做的趣事,总能让父母记很久,现在终于明白,为什么小时候明明觉得不值一提...
    不做焦虑妈妈阅读 134评论 0 0