一、什麼叫重構?編程
答:重構(Refactoring)就是經過調整程序代碼改善軟件的質量、性能,使其程序的設計模式和架構更趨合理,提升軟件的擴展性和維護性,系統發展到必定階段後,使用重構的方式,不改變系統的外部功能,只對內部的結構進行從新的整理。經過重構,不斷的調整系統的結構,使系統對於需求的變動始終具備較強的適應能力。設計模式
重寫:也叫覆蓋,當一個子類繼承一父類,而子類中的方法與父類中的方法的名稱、參數個數、類型都徹底一致時,就稱子類中的這個方法重寫了父類中的方法。(相對於繼承)架構
例子:函數
public class A{//定義類A public void s(){//定義方法s } } public class B extends A{//定義子類B,繼承A public void s(){//重寫父類A的方法s } }
重載:同一個類中,多個方法名同樣,參數列表不同的狀況就是方法的重載。性能
方法重載例子:測試
public class Test { public static void main(String[] args){ Test ts = new Test() ; System.out.println(ts.ss("s1","s2")) ; System.out.println(ts.ss("s1")) ; } public String ss(String s1,String s2){ return s1+s2 ; } public String ss(String s1){ return s1 ; } }
重寫與重載的區別:優化
1.重寫必須繼承,重載不用。spa
2.重寫的方法名,參數數目相同,參數類型兼容,重載的方法名相同,參數列表不一樣。.net
3.重寫的方法修飾符大於等於父類的方法,重載和修飾符無關。設計
4.重寫不能夠拋出父類沒有拋出的通常異常,能夠拋出運行時異常。
總結:
重寫:是對方法自己從新編寫。
重載:函數名相同 參數個數不一樣。
重構:重寫算是重構的一部分,但重構還包括對程序結構的優化。
1、舉個簡單的例子(修牆):
通常來講有如下兩種方案:
方案一:直接推到,新買磚,從新砌牆,一般會遇到難以找到適合砌牆邊的磚頭,砌牆工一般會破壞新磚來到達目的。
方案二:拆牆,把牆磚一個個分解,從新利用,再加上新買少許磚,完美解決難以對齊的問題,而不用去破壞新磚。
2、那麼重構能夠有兩種方法論:
(1)所有推翻,從頭開始,相似於重寫(屬於重構的一種方式)。
(2)以迭代的方式進行重構,相似於重構中的結構優化(屬於重構的另外一種方式)。
3、分解並重組
一、須要分解的狀況:
(1)冗長的代碼;(2)重複的代碼;(3)邏輯不清晰的代碼;(4)不遵循通用編程規範的代碼。
二、方法:
(1)局部變量和參數;(2)變量易名:提升代碼的清晰度;(3)去除臨時變量;
(4)使用多態取代多分支條件邏輯;(5)繼承的使用;(6)pattern的運用;
三、提煉方法和類:
(1)業務需求常常變動的地方;(2)業務功能的清晰劃分;
四、重構策略
測試 -> 小修改 -> 測試 -> 小修改...
總結:重構是以微小的步伐來修改程序的。
五、Java代碼重構的一大方向:完成面向過程到面向對象的轉換。
參考:https://blog.csdn.net/tscyds/article/details/51228970