好吧,這一章要不要自己寫一個考慮了很久,貌似還是不寫的好,因為感覺這一章異常的簡單
這一章就是關於類的方法和字段並不合理,所以在搬移方法和字段
1、搬移函數
修改點:一個函數與其所在類外的另一個類進行了過多的交流,調用後者或被後者調用
動機:因為出現上述情況,就會出現高度耦合,
做法:在該函數最常引用的類中建立一個有著類似行為的新函數,將舊函數變成一個委托函數,或是移除
2、搬移字段
好吧,跟上面那個差不多,實際上也確實差不多
3、提煉類
修改點:某個類做了兩個類的事(就是要單一職責咯)
做法:建立一個新類,將相關的字段和函數從舊類搬到新類
很簡單,但是提煉類是改善並發程序的一種常用技術,因為它使你可以為提煉後的兩個類分別加鎖。
4、去除類
修改點:就像上一章對函數的操作一樣,某個類如果沒有做太多的事情,就存在去除的可能性(通常是之前的重構移走了這個類的責任)
做法:將這個類的所有特性搬移到另一個類中,然後移除原類。
有趣的做法是,將這個類裡的函數都聲明為private,這樣就可以斬斷所有的引用,不過貌似現在的IDE都已經很厲害了,可以很方便找到引用。
5、隱藏委托關系
修改點:客戶通過一個委托類來調用另一個對象
做法:在服務類上建立客戶所需要的所有函數,用以隱藏委托關系
好吧,舉個簡單的例子,周伯通要參加華山論劍,首先他要找到華山這個對象,然後通過這個對象再去論劍,
然後Martin的意思是周伯通現在直接調用華山論劍這個函數,這個函數裡面自己回去調用華山,然後再論劍
你可能會覺得多此一舉,但是這樣就避免了華山這個類的暴露出來,客戶端要知道的是最簡單的東西,而不是暴露一大堆東西出來,他可能就會要理解更多的東西
不利於後來的人的調用這個函數。
6、暴露委托關系(之所以我這麼寫,是為了表示這個東西和隱藏委托關系做法剛好相反,可能更好理解一點)
修改點:某個類做了過多的簡單委托(意思就是說,周伯通這次在華山論劍,下次又在華山喝茶,在下次突然想在華山烤雞,那麼完了,周伯通這個類就要增加三個委托函數,但是
實際上,直接用華山,然後在華山再去論劍,喝茶,烤雞,不必要在華山多了一個爬山之後,又在周伯通類裡面加個華山爬山的函數)
做法:讓客戶直接調用受托類(5和6兩個玩法就是對暴露程度的一種把控,隨著不斷的需求變更或者其它什麼鬼來不斷地去運用5和6以達到適當的暴露成都,為何我寫到這裡總有一種教唆大家去當暴露狂的感覺)
7、引入外加函數和引入本地擴展
所謂引入外加函數就是為你無法修改的類加一個函數時,去建一個函數,把這個無法修改的類的實例作為這個函數的參數
所謂引入本地擴展就是為你無法修改的類加一個函數時,去建立一個新類去繼承這個類,使新類包含這些函數
好吧,這個就不講了,
因為在第二章的時候 第19個重構點不完美的庫類 這個裡面我已經講的很詳細了。
實際上你看到這裡已經可以發現了,基本上我在後來寫的這些東西,在第二章裡面都已經涉及到了,只不過在第二章裡面有的我一筆帶過有的比較詳細而已。