代码大全第18章:表驱动法

  • 为了简化代码逻辑,节省if else和switch case
  • 表驱动法优势之一是可以把表存在文件里,这样数据变动直接改文件,不用改代码。
  • 表驱动有三种方法:

直接查表

  • 比如查每个月有哪几天,可以创建一个长度12的数组。
  • 比如保险费率计算,可以把年龄、是否吸烟、性别等因素作为索引存表。
  • 灵活消息格式:比如有个文件,包含20多种消息,该行是哪一种由开头的id决定
    • 基于逻辑的方法,遍历,根据id判断该行属于哪种消息,然后执行对应函数。
    • 面向对象的方法,遍历,根据id创建子类,执行对应方法。
    • 以上两种方法在某种消息格式改变,或增加新类型的消息时都需要新增或修改对应的方法。
    • 表驱动法:定义一张表,索引是消息的id,数据为该类型的消息的内容格式是怎样的,即有几个字段,每个字段的含义。实际操作时,遍历,然后根据id查表即可。
      代码大全第18章:表驱动法
  • 上面保险费率的例子,可能0-17岁的费率和18岁是一样的,有两种处理方式:
    • 把18岁的费率复制一份存到表中
    • 查询时将0-17岁转成查询18的费率

索引查表

  • 节约空间、操作索引记录比操作主表记录更灵活。
  • 通过id先映射到类型,再通过类型找到商品。比直接id查商品要节约很多空间。
    代码大全第18章:表驱动法

阶梯查表

  • 不是准确查询,而是根据范围。
  • 比如表中保存每个阶级的上限,然后从低到高遍历,第一次超限制就可以得到等级。代码大全第18章:表驱动法
  • 可以考虑用二分查找优化效率。