表驱动法是一种编程模式(scheme)--从表里面查找信息而不使用逻辑语句(if和else)。根据代码大全中的描述,凡是能通过逻辑语句来选择处理的事物,都可以通过查表来选择。但是对于简单的逻辑,则不宜使用表驱动法,表驱动发更加适合复杂的逻辑。
适当情况下使用表驱动法的几个好处:
- 生成的代码简单;
- 容易修改维护;
- 效率更高。
使用表驱动法存在的问题:
- 怎样从表中查询数据,查询数据的方法(直接访问、索引访问、阶梯访问);
- 表中应该存储什么样的数据(数据还是动作action)
- 直接访问:也就是可以直接从表中查询到需要的结果信息,而不需要一些复杂的逻辑。类似数据结构中的顺序查找、二分查找等。
- 索引访问:当通过直接访问无法实现或者效率很低时,就要考虑索引访问,通过用一个基本类型的数据从一张索引表中查出一个键值,然后再用这一键值查询感兴趣的主数据。(主要两个优点:1) 数据很大时,通过索引访问可以节省空间;2) 有时没有节省空间也会带来时间的节省。
- 阶梯访问:基本思想是表中的记录对于不同的数据范围有效,而不是对不同的数据点有效。这种方法比索引访问节省空间。
表驱动法的要点:
- 对复杂的逻辑和继承结构提供一种替换方案;
- 决定替换后,考虑何种方法访问表;
- 应该把什么内容存入到表中。