1. 程式人生 > >重構---重構手法-----替換演算法(Substitute Algorithm)

重構---重構手法-----替換演算法(Substitute Algorithm)

本文是在學習中的總結,歡迎轉載但請註明出處:

本文轉載,原作者:皮斯特勞沃

http://blog.csdn.net/pistolove/article/details/42582611

開門見山

發現:你想要把某個演算法替換為另一個更清晰的演算法。

        解決:將函式本體替換為另一個演算法。

  //重構前
    String foundPerson(String[] people){
        for (int i = 0; i < people.length; i++) {
            if(people[i].equals("Don")){
                return "Don";
            }

            if(people[i].equals("John")){
                return "John";
            }

            if(people[i].equals("Dave")){
                return "Dave";
            }
        }
        return "";
    }
   //重構後
    String foundPerson(String[] people){
        List<String> candidates = Arrays.asList(new String[]{"Don","John","Dave"});
        for (int i = 0; i < people.length; i++) {
            if(candidates.contains(people[i])){
                return people[i];
            }
        }
        return "";
    }


動機

        解決問題的方法往往會有很多種,但是其中總會有一些方法比另一些簡單。演算法也是如此。如果你發現做一件事可以有更加清晰的方式,就應該以清晰的方式取代複雜的方式。“重構”可以把一些複雜東西分解為較簡單的小塊,當有時候你就必須刪除整個演算法,待之以簡單的演算法。

        隨著對問題有了更多瞭解,你往往會發現,在原先的做法之外,有更簡單的解決方案,此時,你就需要改變原先的演算法,使之變得更加清晰、簡潔。

        在使用這項重構手法之前,你需要確定自己已經儘可能分解原先函式。替換一個巨大而複雜的演算法是非常困難的,只有先將它分解為較簡單的小型函式,然後你才能很有把握地進行演算法替換工作。

做法

(1)準備好一個(替換用)的演算法,讓其通過編譯。 (2)針對現有測試,執行上述新演算法。如果結果和原本結果相同,重構結束。 (3)如果測試結果不同於原先,在測試和除錯過程中,以舊的演算法為參照標準。    本文主要介紹了重構手法——替換演算法。我覺得該重構手法不是特意去尋找某個演算法來替換當前的演算法,而是在你開發的過中,當你發現某一段程式碼可以變得更好,可以被一個的獨立的函式或者演算法替換的時候,才進行該重構手法。如果單純為了重構而重構,那是沒有意義的。應該以實際情況為標準,加以判斷,再考慮是否進行重構。    本篇文章是圍繞著以“重新組織函式”的方式來進行的重構。