表驱动概述<一>
2012-03-08 21:42
295 查看
表驱动是一种设计方法,使用表驱动替代程序中复杂的if else或者switch case逻辑。
使用这种方法可以使程序的逻辑简洁、直白并且易于维护。
先举个例子让大家认识表驱动,有这样的需求:
写一个程序计算顾客租书的费用,书店有租书业务,把图书分为三类:漫画书,儿童书,普通书。
普通书的租书的价格是1元/天,儿童书是1.5元/天,漫画书的价格是1.8元/天。
上面的程序写的没有问题,但是如果书店扩大经营之后,图书的种类增加到了100种,上面的方法就需要写100个if else了,而且如果老板在经营过程中发现自己的某种类型的书定价过高,需要修改自己的租书价格,那么我们就需要从100个if else种寻找,并且修改,有没有简单的方式可以解决这个问题呢?
下面我使用表驱动的方式重新书写RentCost函数
上面的函数的现实的优势在于程序逻辑简洁清晰,还有一个更重要的原因在于如果把程序的atBRPrice数组放入配置文件中,在计算租书费用的程序启动时读取这个文件,如果书店老板想修改租书价格,增加图书种类,再也不用重新修改和编译程序了,直接修改配置文件即可。
通过这个例子大家可以看出表驱动方式可以消除代码中冗长复杂的if else,让程序清晰可读,最重要的是让你的程序可以动态的配置。
使用表驱动需要考虑两个问题:
1.如何访问你填写的表?
代码大全中提到了三种方式 1.直接访问(例子中讲到)2.索引访问 3.阶梯访问
2.表中存放什么什么。
表中存放可以是你需要的数据,如上例中讲到了,还可以是动作(回调函数),将对当前情况的处理。
使用这种方法可以使程序的逻辑简洁、直白并且易于维护。
先举个例子让大家认识表驱动,有这样的需求:
写一个程序计算顾客租书的费用,书店有租书业务,把图书分为三类:漫画书,儿童书,普通书。
普通书的租书的价格是1元/天,儿童书是1.5元/天,漫画书的价格是1.8元/天。
#define ORDINARY_BOOK 1 #define CHILDREN_BOOK 2 #define CARTOON_BOOK 3 int RentCost(int bookSort, int days) { int double result = 0; if(bookSort == ORDINARY_BOOK) { result = days*1; } else if(bookSort == CHILDREN_BOOK) { result = days*1.5; } else if(bookSort == CARTOON_BOOK) { result = days*1.8; } return result; }
上面的程序写的没有问题,但是如果书店扩大经营之后,图书的种类增加到了100种,上面的方法就需要写100个if else了,而且如果老板在经营过程中发现自己的某种类型的书定价过高,需要修改自己的租书价格,那么我们就需要从100个if else种寻找,并且修改,有没有简单的方式可以解决这个问题呢?
下面我使用表驱动的方式重新书写RentCost函数
#define ORDINARY_BOOK 1 #define CHILDREN_BOOK 2 #define CARTOON_BOOK 3 Double atBRPrice[] = { 1,1.5,1.8 } int RentCost(int bookSort, int days) { double result = 0; result = atBRPrice[bookSort-1]*days; return result; }
上面的函数的现实的优势在于程序逻辑简洁清晰,还有一个更重要的原因在于如果把程序的atBRPrice数组放入配置文件中,在计算租书费用的程序启动时读取这个文件,如果书店老板想修改租书价格,增加图书种类,再也不用重新修改和编译程序了,直接修改配置文件即可。
通过这个例子大家可以看出表驱动方式可以消除代码中冗长复杂的if else,让程序清晰可读,最重要的是让你的程序可以动态的配置。
使用表驱动需要考虑两个问题:
1.如何访问你填写的表?
代码大全中提到了三种方式 1.直接访问(例子中讲到)2.索引访问 3.阶梯访问
2.表中存放什么什么。
表中存放可以是你需要的数据,如上例中讲到了,还可以是动作(回调函数),将对当前情况的处理。
相关文章推荐
- S3C2440 LCD驱动(FrameBuffer)实例开发<一>
- 一步步优化JVM<一>:概述、方法及需求
- Android中Input型输入设备驱动原理分析<一>
- 黑马程序员 java概述与基础知识<一>
- 程序员_Java初级<一> 概述
- 表驱动概述<二>
- Jabber 协议概述 <一>
- 黑马程序员 Java基础<一>---> 面向对象与类之概述(匿名对象、封装、构造函数、this、静态等)
- <一>Ioc控制反转——手把手教学:如何配置并使用单元测试一个spring框架(附源码)
- java.util.Collection体系源码解读<一>Collection简介
- LoadRunner脚本编写&lt;一&gt;--&nbsp;检查点…
- 程序员 7K面试题<一>---交通灯管理系统
- 关于怎样使用three.js的小教程<一>
- 【CSS基础】琐碎记录<一>
- PE文件结构详解<一>
- 链表的那些事儿<一>
- 收集未经测试的Epoll模型代码<一>
- <寒江独钓>Windows内核安全编程__具有还原功能的磁盘卷过滤驱动
- Git基础操作<一>
- socket编程<一>