本文借鉴《编写高质量的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];
}
这是一种按照索引值驱动的表驱动法。
枚举元素的整型值与数字索引组合起来。
同时也有一定局限性,在满足不了需求的情况下,再用多态!