有些时候分支判断很冗长,而且有时候同样的分支判断还会多个地方重复使用。这样的分支判断代码即不美观也不易扩展。
比如有下面这样的分支判断代码
class A
public void method(String state){
if("state1".equals(state)){
//..省略代码1
} else if("state2".equals(state)){
//..省略代码2
} else if("state3".equals(state)){
//..省略代码3
} else {
//..省略代码4
}
}
}
去除分支判断分两步
- 把分支的代码和分支判断分解到单独的类
- 改写A.method方法
interface State{
//分支的代码
public void method();
//分支判断
public boolean test(String state);
}
class StateOne implements State{
public void method(){
//..省略代码1
}
public boolean test(String state){
return "state1".equals(state);
}
}
//省略 StateTwo 、StateThree、StateFour
class A
List<State> states = new ArrayList<>();
{
states.add(new StateOne());
states.add(new StateTwo());
states.add(new StateThree());
states.add(new StateFour());
}
public void method(String state){
for(State st: states) {
if (st.test(state) {
st.method();
}
}
}
}
除了上面的方法,建议去学习一下设计模式的策略模式和状态模式,两种模式都可以避免冗长分支判断。当然模式本身不是为了这个目的,但确实可以避免冗长分支判断。
应用场景
1、需要复用分支代码
2、分支代码太长且逻辑有内聚性,根据单一职责原则,已经足以把它独立为一个类