思維導圖
索引:
介紹
承接上文http://blog.csdn.net/tonyxf121/article/details/7986831 ,繼續說重構方面的內容。
專業術語
delegate:委託
前言
”決定把責任放在哪裏“——運用重構改變原先的設計。
解釋:
1、Class承擔過多而臃腫不堪——Extract Class將一部分責任分離出去。
2、Class沒有承擔足夠多的責任,不再有單獨存在的理由——Inline Class將它融入另一個Class。
3、Class使用另一個Class——Hide Delegate隱藏關係。
4、承接(3),如果Client通過Middle Man 調用很多的Delegate Class的函數(這裏只是簡單調用,只做跳轉,而Middle Man沒有做太多的業務邏輯,如10個Delegate Class中的Method對應10個Middle Man的Method)——Remove Middle Man,直接使用Delegate Class,可以部分使用Delegate Method。
如果一個類中的方法與另一個類有很多的交流,那麼我們就在另一個類中建立一個有類似功能的新函數,將舊函數變成一個單純的Delegating Method, 或是將舊函數移除。
類圖:
動機:
1、如果一個類與另一個類有高度耦合,我就會Move Method。——class更簡單,更乾淨利落的實現系統交付的任務。
2、移動一些值域,就要檢查是否使用另一個類的次數必使用所駐對象的次數還多。
狀況:你的class中的field被另一個class更多的用到。那麼在另一個class裏建立new field,修改舊的field。
狀況:你的某個Class沒有做太多事情(沒有承擔足夠責任),那麼將Class的所有特性搬移到另一個Class中,然後移除原Class。
狀況:客戶直接調用Server Object的Delegate Class的Method,那麼在Server端建立客戶所需的函數Method,用以隱藏委託關係。
狀況:如果某個Class做了過多的Simple Delegate,那麼我們就直接調用Delegate Class。
狀況:有一個類Client需要使用的類PreviousEnd中一個額外函數,但你無法修改這個類PreviousEnd,那麼你就在Client中建立一個函數,並以一個PreviousEnd實體做爲參數。
狀況:你的Class需要一些額外函數,但你不能修改當前的類,那麼建立一個新Class,使它包含這些函數。使用Subclass 或 Wrapper。——這個一般用於你無法修改源碼的情況下使用。
總結
需要注意一下,“Extract Class”和“Inline Class”,”Hide Delegate“和”Remove Middle Man",都是相反的過程,具體理解,可以看前言中的那張流程圖。
原文地址:http://www.cnblogs.com/baochuan/archive/2012/04/01/2427199.html