去if-else化(一),利用工廠模式

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();
    }

至此整個重構完成,利用抽象和多態的特性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章