有些时候分支判断很冗长,而且有时候同样的分支判断还会多个地方重复使用。这样的分支判断代码即不美观也不易扩展。
比如有下面这样的分支判断代码
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、StateFourclass 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、分支代码太长且逻辑有内聚性,根据单一职责原则,已经足以把它独立为一个类