问题
if else过多问题可以分成三类问题:
- if…else 过多
- 逻辑表达式复杂
- 嵌套过深
本节只讨论过多问题:
public void test(){
if(condition1){
//do something
}else if(conditon2){
//do something
}else if(conditon3){
//do something
}else if(conditon4){
//do something
}else if(conditon5){
//do something
}
}
解决问题
解决if…else过多问题的几种方案:
表驱动、责任链模式、注解驱动、事件驱动、有限状态机、Optional、多态。
结构化思维导图:
方法1:表驱动
**介绍:**对于逻辑表达模式固定的 if…else 代码,可以通过某种映射关系,将逻辑表达式用表格的方式表示;再使用表格查找的方式,找到某个输入所对应的处理函数,使用这个处理函数进行运算。
**适用场景:**逻辑表达式比较固定的场景
使用表驱动法的两个问题:
- 怎样从表中查询条目:直接访问、索引访问、阶梯访问
- 表里应该存储什么:数据、动作、函数、类,其实都可以,针对于java语言,一切皆是对象,那么表里可以存对象,只是要确定这个对象充当的角色就可以。
直接访问-案例代码:
int getMonthsDay(int month){
int day;
switch(month){
case 1,3,5,7,8,10,12:
day=31;break;
case 4,6,9,11:
day=30;break;
case 2:
day=28;break;
default: day=0;
}
return day;
}
//优化版本表驱动法
int days[]={
31,28,31,30,31,30,31,31,30,31,30,