什么是表驱动方法?

时间:2008-09-19 20:28:10

标签: design-patterns table-driven

什么是“表驱动方法”?

比尔盖茨在second Windows Vista commercial在1:05提到。

3 个答案:

答案 0 :(得分:20)

  

表驱动方法是允许您在表中查找信息而不是使用逻辑语句(即case,if)的方案。在简单的情况下,使用逻辑语句更快更容易,但随着逻辑链变得越来越复杂,表驱动代码比复杂逻辑更简单,更易于修改和更高效。

参考:McConnell, Steve. Code Complete, Second Edition. Redmond (Washington): Microsoft, 2004. Print. Page 411, Paragraph 1.

答案 1 :(得分:8)

引用的视频中有比尔盖茨从史蒂夫麦康奈尔的书中完整阅读。 Jeff Atwood mentioned this in his blog (the YouTube links match up).

从Code Complete,第2版:

  

表驱动方法是一种允许您在表中查找信息而不是使用逻辑语句( if case )来计算信息的方案。

McConnell使用数组作为他的"表"在他的例子中,但我认为这个概念可以应用于数据库表或任何其他类似表格的东西。

这个概念最好通过一个例子来解释。

我们假设您正在经营一家餐馆,每个餐桌的座位数不同。

获取特定表格席位数的逻辑可能类似于

if table number == 1
    table has 4 seats
else if table number == 2
    table has 8 seats
. . .

所以,如果您有50个表,那么您将拥有100行代码来确定席位数。

使用表驱动的方法,你可以创建一个数组,其索引代表表号,代表座位数的值,所以你的逻辑看起来像

tables [] = {4, 8, 2, 4, ...}
table seats = tables[table number]

更简单,更短,更易于维护。

答案 2 :(得分:3)

表驱动方法非常简单。使用数据结构而不是if-then语句来驱动程序逻辑。例如,如果您正在处理两种类型的记录(电视与电缆),您可以这样做:

hash[tv] = process_tv_records
hash[cable] = process_cable_records

在某些语言中,如Ruby或Perl,这种技术很简单。在Java中,您需要使用Reflection来查找方法句柄。

如果您想了解决策表,请在http://fitnesse.org/调查Fitnesse测试框架。