1、什么是表驱动法.
表驱动法是一种编程模式(Scheme),从表里面查找信息而不使用逻辑语句(if 和case)它的好处是消除代码里面到处出现的if、else、swith语句,让凌乱代码变得简明和清晰。对简单情况而言,表驱动方法可能仅仅使逻辑语句更容易和直白,但随着逻辑的越来越复杂,表驱动法就愈发有吸引力。
2、表驱动法的例子演示
假设有段程序要计算某年某月的天数,通常的做法如下:
Code
1private void btnCalculate_Click(object sender, EventArgs e)
2 {
3 //检测输入是否正确
4 if (!CheckInput()) return;
5
6 int days = 0 ;
7
8 int month = Convert.ToInt16(txbMoth.Text);
9
10 switch (month)
11 {
12 case 1:
13 days = 31;
14 break;
15 case 2:
16 if (IsLeapYear(txbYear.Text))
17 {
18 days = 29;
19 }
20 else
21 {
22 days = 28;
23 }
24 break;
25 case 3:
26 days = 31;
27 break;
28 case 4:
29 days = 30;
30 break;
31 case 5:
32 days = 31;
33 break;
34 case 6:
35 days = 30;
36 break;
37 case 7:
38 days = 31;
39 break;
40 case 8:
41 days = 31;
42 break;
43 case 9:
44 days = 30;
45 break;
46 case 10:
47 days = 31;
48 break;
49 case 11:
50 days = 30;
51 break;
52 case 12:
53 days = 31;
54 break;
55 default:
56 break;
57
58 }
59
60 txbOutPut.Text = days.ToString();
61 }
大家可能会看到这里会出现大量的switch、case语句,其实这只是个简单的逻辑,如果在业务逻辑复杂的情况下,代码里这些if 、else,switch,case语句必将是铺天盖地的出现。好了,我们来看看,表驱动的方法的简单应用吧。
Code
1 private void btnCalculate_Click(object sender, EventArgs e)
2 {
3 if (!CheckInput()) return;
4
5
6 int[] dayPerMonth = new int[12] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
7 int[] ldayPerMonth = new int[12] { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
8
9 int days = 0;
10 int index = Convert.ToInt16(txbMoth.Text);
11
12 if (IsLeapYear(txbYear.Text))
13 {
14 days = ldayPerMonth[index];
15 }
16 else
17 {
18 days = dayPerMonth[index];
19 }
20
21 txbOutPut.Text = days.ToString();
22
23
24 }
对比这两段代码,你会发现如果用表驱动法,你的代码将会更简洁,明了。
3、表驱动法查询数据的方式
* 直接访问(Direct Access)
* 索引访问(Index Access)
* 阶梯访问(Stair-Step Access)
4、表驱动法优点
前面一直在强调表驱动法的优点,下面我们来总结一下:
* 在适当环境下,使用它能够使代码简单、明了。
* 修改容易(易维护)、效率更高。
* 表驱动法的一个好处就是能够大量消除代码中if else, swith 判断。
代码大全上的,提倡用此法。