第七章 在對象之間搬移特性(Moving Features Between Objects)
7.1 Move Method(搬移函數)
癥狀:你的程式中,有個函數與其所駐class之外的另一個class進行更多交流;調用後者或被後者調用。
解決辦法:在該函數最常引用的class中建立一個有著類似行為的新函數。將舊函數變成一個單純的委託函數,或者是將舊函數完全移除。
7.2 Move Field(搬移範圍)
癥狀:你的程式中,某個field(範圍)被其所駐class之外的另一個class更多地用到。
解決辦法:在target class建立一個new field,修改source field的所有使用者,令它們改用new field.
7.3 Extract Class(提煉類)
癥狀:某個class做了應該由兩個classes做的事
解決辦法:
7.4 Inline Class(將類內聯化)
癥狀:你的某個class沒有做太多事情(沒有承擔足夠責任)
解決辦法:將class的所有特性搬移到另一個class中,然後移除原class
7.5 Hide Delegate(隱藏委託關係)
癥狀:客戶直接調用其server object(服務物件)的delegate class.
解決辦法:在server端(某個class)建立客戶所需的所有函數,用以隱藏委託關係。
7.6 Remove Middle Man(移除中間人)
癥狀:某個class 做了過多的簡單委託動作(simple delegation)
解決辦法:讓客戶直接調用delegate(受託類)
7.7 Introduce Foreign Method(引入外加函數)
癥狀:你所使用的server class需要一個額外函數,但你無法修改這個class.
解決辦法:在client class中建立一個函數,並以一個server class實體作為第一引數(argument)
7.8 Introduce Local Extension(引入本地擴充)
癥狀:你所使用的server class需要一些額外函數,但你無法修改這個class
解決辦法:建立一個新class,使它包含這些額外函數。讓這個擴充品成為souce class的subclass或wrapper(外覆類)