處理概括關(guān)系
11.1 Pull Up Field (字段上移)
兩個子類擁有相同的字段,將字段移至超類
11.2 Pull Up Method (函數(shù)上移)
有些函數(shù),在各個子類中產(chǎn)生完全相同的結(jié)果,將該函數(shù)移至超類
11.3 Pull Up Constructor Body (構(gòu)造函數(shù)本體上移)
如果在各個子類中擁有一些構(gòu)造函數(shù),它們的本體幾乎完全相同,在超類中新建一個構(gòu)造函數(shù),并在子類構(gòu)造函數(shù)中調(diào)用它
11.4 Push Down Method (函數(shù)下移)
超類中的某個函數(shù)只與部分子類有關(guān),將這個函數(shù)移到相關(guān)的那些子類去
11.5 Push Down Field(字段下移)
超類中的某個字段只被部分子類用到,將這個字段移動到需要它的那個子類去
11.6 Extract Subclass (提煉子類)
類中的某些特性只被某些實(shí)例用到,新建一個子類,將上面所說的那一部分特性移動到子類中
11.7 Extract Superclass (提煉超類)
兩個類有相似特性,為這兩個類建立一個超類,將相同特性移至超類
11.8 Extract Interface(提煉接口)
若干客戶使用類接口中的同一子集,或者兩個類的接口有部分相同,將相同的子集提煉到一個獨(dú)立接口中。
11.9 Collapse Hierarchy(折疊繼承體系)
超類和子類之間無太大區(qū)別,將它們合為一體
11.10 Form Template Method (塑造模板函數(shù))
有一些子類,其中響應(yīng)的某些函數(shù)以相同順序執(zhí)行類似的操作,但哥哥操作的細(xì)節(jié)上有所不同
將這些操作分別放進(jìn)獨(dú)立函數(shù)中,并保持它們都有相同的簽名,于是原函數(shù)也就變得相同了,然后將原函數(shù)上移至超類
在JDK庫里有很多類似的操作,線程池/AQS源碼等
11.11 Replace Inheritance with Delegation(以委托取代繼承)
某個子類只使用超類接口中的一部分,或者是根本不需要集成而來的數(shù)據(jù)
就是用組合取代集成
11.12 Replace Delegation with Inheritance (以繼承取代委托)
如果你發(fā)現(xiàn)自己需要使用委托類中的所有函數(shù),且話費(fèi)了很大力氣編寫所有極簡的委托函數(shù),
可以將組合方式改為集成方式。