【重構-改善代碼的設計】學習筆記-Part2(從頭到尾學習重構)

8 簡化函數調用

8.1 Rename Method(函數改名)

8.2  Add Parameter(添加參數)

8.3 Remove Parameter(移除參數)

8.4 Separate Query from Modifier(將查詢函數和修改函數分離)

8.5 Parameterize Method(令函數攜帶參數)

       若兩個或多個函數做着類似的工作,但因少數幾個值致使行爲略有不同。這種情況下,你可以將這些各自分離的函數統一起來,並通過參數來處理那些變化情況,用以簡化問題。以“可將少量數值視爲參數”爲依據,找出帶有重複性的代碼。

8.6 Replace Parameter with Explicit Methods(以明確函數取代參數)

8.9 Introduce Parameter Object(引入參數對象)

8.10 Remove Setting Method(移除設值函數)

8.11 Hide Method(隱藏函數)

8.12 Replace Constructor with Factory Method(以工廠函數取代構造函數)

1. 根據整數(實際是類型碼)創建對象

2. 根據字符串創建子類對象。Class.forName():它向用戶暴露了子類名稱

3. 以明確函數創建子類

8.13 En capsulate Downcast(封裝向下轉型)

Object lastReading(){

     return readings.lastElement();

}------>

Reading lastReading(){

    return (Reading) readings.lastElement();

}

8.14 Replace Error Code with Exception(以異常取代錯誤碼)

8.15 Replace Exception with Test(以測試取代異常)

9 處理概括關係

        pull up field 和 pull up method 都用於將特性向繼承體系的上端移動,push down method 和 push down field 則將特性向繼承體系的下端移動。構造函數比較難以向上拉動,因此專門有一個pull up constructors body 處理它,我們不會將構造函數往下推,因爲replace constructors with factory method 通常更管用。

9.1 Pull Up Field (字段上移)

兩個子類擁有相同的字段,將該字段移至超類。

9.2 Pull Up Method (函數上移)

有些函數,在各個子類中產生完全相同的結果,將該函數移至超類。

9.3 Pull Up Constructor Body(構造函數本體上移)

9.4 Push Down Method(函數下移)

9.5 Push Down Field(字段下移)

9.6 Extract Subclass(提煉子類)

9.7  Extract Superclass(提煉超類)

9.8 Extract Interface(提煉接口)

若干客戶使用類接口中的同一個子集,或者兩個類的接口有部分相同,將相同的子集提煉到一個獨立接口中。

       類之間有彼此互用的方式有若干種。“使用一個類”通常意味着用到類的所有責任區。另一種情況是,某一組客戶只使用類責任區中的一個特定子集。再一種情況則是,這個類需要與所有協助處理某些特定請求的類合作。

9.9 Collapse Hierarchy(摺疊繼承體系)

超類和子類之間無太大區別,將它們合爲一體。

9.10 From Template Method(塑造模板函數)

    你有一些子咧,其中相應的某些函數以相同順序執行類似的操作,但各個操作的細節上有所不同,將這些操作分別放進獨立函數中,並保持它們都有相同的簽名,於是原函數也就變得相同了。然後將原函數上移至超類。

9.11 Replace Inheritance with Delegation(以委託取代繼承)

9.12 Replace Delegation with Inheritance(以繼承取代委託)

10 大型重構

10.1 Tease Apart Inheritance(梳理並分解繼承體系)

       某個繼承體系同時承擔兩項責任。建立兩個繼承體系,並通過委託關係讓其中一個可以調用另一個。

       要指出繼承體系是否承擔了兩項不同的責任並不困難:如果繼承體系中的某個特定層級上的所有類,其子類名稱都以相同的形容詞開始,那麼這個體系很可能就是承擔着兩項不同的責任。

10.2 Convert Procedural Design to Objects(將過程化設計轉化爲對象設計)

10.3 Separate Domain from Presentation(將領域和表述/顯示分離)

10.4 Extract Hierarchy(提煉繼承體系)

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