表驱动方法

1:什么是表驱动法.
     表驱动法是一种编程模式(Scheme),从表里面查找信息而不使用逻辑语句(if 和case) 它的好处是消除代码里面到处出现的if、else、swith语句,让凌乱代码变得简明和清晰。对简单情况而言,表驱动方法可能仅仅使逻辑语句更容易和直白,但随着逻辑的越来越复杂,表驱动法就愈发有吸引力。
2:表驱动法的例子演示
    假设有段程序要计算某年某月的天数
    通常的做法如下:

private void btnCalculate_Click(object sender, EventArgs e)
{
    //检测输入是否正确
    if (!CheckInput()) return;
    
    int days = 0 ;

    int month = Convert.ToInt16(txbMoth.Text);

    switch (month)
    {
      case 1:
          days = 31;
          break;
      case 2:
          if (IsLeapYear(txbYear.Text))
          {
              days = 29;
          }
          else
          {
              days = 28;
          }
          break;
      case 3:
          days = 31;
          break;
      case 4:
          days = 30;
          break;
      case 5:
          days = 31;
          break;
      case 6:
          days = 30;
          break;
      case 7:
          days = 31;
          break;
      case 8:
          days = 31;
          break;
      case 9:
          days = 30;
          break;
      case 10:
          days = 31;
          break;
      case 11:
          days = 30;
          break;
      case 12:
          days = 31;
          break;
      default:
          break;

    }

    txbOutPut.Text = days.ToString();                     
}
View Code

大家可能会看到这里会出现大量的switch、case语句,其实这只是个简单的逻辑,如果在业务逻辑复杂的情况下,代码里
这些if 、else,switch,case语句必将是铺天盖地的出现。好了,我们来看看,表驱动的方法的简单应用吧

private void btnCalculate_Click(object sender, EventArgs e)
{
    if (!CheckInput()) return; 
    int[] dayPerMonth = new int[12] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int[] ldayPerMonth = new int[12] { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int days = 0;
    int index = Convert.ToInt16(txbMoth.Text);
    if (IsLeapYear(txbYear.Text))
    {
        days = ldayPerMonth[index];
    }
    else
    {
        days = dayPerMonth[index];
    }
    txbOutPut.Text = days.ToString();   
}
View Code

对比这两段代码,你会发现如果用表驱动法,你的代码将会更简洁,明了。
3:表驱动法查询数据的方式

  • 直接访问(Direct Access)
  • 索引访问(Index Access)
  • 阶梯访问(Stair-Step Access)

4:表驱动法优点
     前面一直在强调表驱动法的优点,下面我们来总结一下:

    • 在适当环境下,使用它能够使代码简单、明了。
    • 修改容易(易维护)、效率更高。
    • 表驱动法的一个好处就是能够大量消除代码中if  else, switch 判断。
posted @ 2018-04-21 09:59  落霞秋水  阅读(587)  评论(1编辑  收藏  举报