java 表驱动_减少if...else...的表驱动

$result = '';

switch (date('w')){

case 0:

$result ='星期日';break;

case 1:

$result ='星期一';break;

case 2:

$result ='星期二';break;

case 3:

$result ='星期三';break;

case 4:

$result ='星期四';break;

case 5:

$result ='星期五';break;

default:

$result ='星期六';

}

return $result;

编程人员一般采用下面的方式,将星期组织成一个数组(可以称作表),安卓索引取出对应的汉字。

$map= array('星期日','星期一','星期二','星期三','星期四','星期五','星期六');

return $map[date('w')];

这就是表驱动,在大家的编程生涯中或多或少都接触过,只是没有提出来总结一下,现在是不是觉得自己的实现方式很高大上了。

表驱动法是一种编程模式,从表里面查找信息而不是使用逻辑语句(if…else…switch)。

上面只是一维表驱动,下面扩展正多维,先看一个二维的例子,这也是表驱动经典的例子了。

《星际穿越》(原来例子不是这样描述滴)中人类生产食物的总和有限,不得不根据对象的特点进行食物的分配,规则如下

18岁以下男可以领取100斤食物

18-60岁男可以领取120斤食物

60岁以上男可以领取100斤食物

18岁以下女可以领取90斤食物

18-60岁女可以领取110斤食物

60岁以上女可以领取95斤食物

if....else...方式

function getFoodWeight($age, $gender)

{

if ($age < 18) {

if ($gender) {

$food = 100;

} else {

$food = 90;

}

} else if ($age > 60) {

if ($gender) {

$food = 100;

} else {

$food = 95;

}

} else {

if ($gender) {

$food = 120;

} else {

$food = 110;

}

}

return $food;

}

表驱动方式,第一维度为年龄,第二维度为性别

$config = array(

array(90, 100),

array(110, 120),

array(95, 100),

);

function getFoodWeight($age, $gender)

{

global $config;

$ageDimension = ($age - 18 > 0) + ($age - 60 > 0);

$genderDimension = $gender;

return $config[$ageDimension][$genderDimension];

}

表驱动方式是不是使代码能够使代码简单、明了,便于维护。

忽然有一天开始加入身材胖、正常、瘦因子进行食物分发,就是如下的规则

18岁以下男胖子可以领取100斤食物

18岁以下男瘦子可以领取100斤食物

........

那就是三维表驱动啦。

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2015-05-13 19:52

浏览 1088

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值