一.Extract method
當一個函數過長的時候,提煉出一些小的函數。主要有三種情況:
1.沒有臨時變量時,直接提取。
2.有臨時變量,但臨時變量的值在被提煉函數中不作改變,將temporary parameter傳入extract method直接使用。
3.有臨時變量,并且臨時變量的值會多次被改變,在被提取的函數中將臨時變量改變的值返回。
二.Inline method
將一段代碼或拆分的函數重新inline到一個大函數中,除去不必要的間接調用。
Inline Temp,將只被賦值一次的臨時變量替換為表達式本身,因為它可能妨礙了其它的重構。
三.Replace Temp With Query,將表達式提煉為函數,temp variable被賦值多次的情況,考慮使用split temporary variable.
四.Introduce Explaining Variable,將復雜表達式或者它的一部分的結果放到臨時變量中,以變量名來解釋表達式用途。在條件邏輯中通常具有使用意義。但它通常在extract method難以進行時才使用,因為它只能針對特定函數。
五.Split Temporary Variable,某個臨時變量使用超過一次,將它拆分為多個臨時變量。
六.Remove Assignments to Parameters,代碼對參數進行賦值,用臨時變量替代參數在代碼中的位置。這樣的代碼讓人迷糊,在JAVA中所有參數都是pass by value,不存在pass by refrence.
個人的理解,我認為當傳遞的參數是對象,java是copy了這個對象參數,它和傳遞的參數指向一個地址,當你對這個對象再賦值時,是將這個copy的對象參數重新指向了一個新的地址,而無法影響傳進來的參數本身,但是你可以通過操作這個對象來修改它所指向的地址中的值。學過C,有指針概念的人我想應該不難理解。
七.Replace Method With Method Object,將函數放到對象中,局部變量變成值域。
八.Substitute Algorithm