if-else是平時寫代碼中最常用的一種寫法,當我們代碼量小的時候用來做條件判斷是再簡單不過的了。當需要判斷的情況逐漸增加的時候,上面的代碼可能會變的難以維護。這個是在進階高級開發的路上,應該逐步培養起這種前瞻意識,下面就介紹如何重構這樣的代碼。
public void test(String str) {
if (str.equals("a")) {
processWithA();
} else if (str.equals("b")) {
processWithB();
} else if (str.equals("c")) {
processWithC();
} else if(str.equals("d")) {
processWithD();
}
}
上面的這段代碼可以用工廠模式進行一次重構,從代碼的中看出,不同的條件,執行的邏輯不同,可以把這種邏輯抽象出來,用多態的概念來定義不同的執行方式。
public abstract class TargetExecutor {
public abstract void process();
}
class ExecutorTargetA extends TargetExecutor {
@Override
public void process() {
}
}
class ExecutorTargetB extends TargetExecutor {
@Override
public void process() {
}
}
class ExecutorTargetC extends TargetExecutor {
@Override
public void process() {
}
}
class ExecutorTargetD extends TargetExecutor {
@Override
public void process() {
}
}
定義好接口後,在看看使用方式的變化:
public TargetExecutor targetExecutor;
public void test(String str) {
if (str.equals("a")) {
targetExecutor = new ExecutorTargetA();
} else if (str.equals("b")) {
targetExecutor = new ExecutorTargetB();
} else if (str.equals("c")) {
targetExecutor = new ExecutorTargetC();
} else if(str.equals("d")) {
targetExecutor = new ExecutorTargetD();
}
targetExecutor.process();
}
至此整個重構完成,利用抽象和多態的特性。