從新組織數據相關重構手法數據庫
1.Self Encapsulate Field(自封裝字段)(你直接訪問一個字段,可是字段之間的耦合變得笨拙,爲這個字段創建setter getter 並只用函數來訪問字段)數組
2.Replace Data Value with Object(用對象取代數據值)(你有一個數據項,須要和其餘數據和行爲一塊兒纔有意思,那就把數據項變爲對象)函數
3.Change Value to Reference(把值對象改成引用對象,你從一個類衍生出許多彼此相等的實例,但願把他們替換爲同一個對象,把這個值對象變爲引用對象)spa
4.Change Reference to value(把引用對象改成值對象 )(你有一個引用對象,很小切不可變,並且不易管理,把他變爲一個值對象)指針
5.Rpplace Aarray with object(以對象取代數組)(你有一個數組,其中的元素各自表明不一樣的東西,以對象替換數組,對於數組中的每一個元素,以一個字段來表示)code
6.Duplicate Observed Data(複製」被監視數據「,你有一些領域數據置身於GUI控件中,而領域函數須要訪問這些數據。將該數據複製到一個領域對象中創建Observer模式,用於同步領域對象和GUI對象內的重複數據)server
7.change unidirectional associarion to bidirectional(把單向關聯改成雙向關聯)(2個類都須要使用對方特性,但其間只有一條單向連接,添加一個反向指針,並修改函數可以同時更新到2條連接)對象
8.change bidirectional association to unidirectional(把雙向關聯改成單向關聯)(2個類之間有雙向關聯,但其中一個類現在再也不須要另一個類的特性。去除沒必要要的關聯)繼承
9.replace magic number with sysbolic constant(以字面常量取代魔數)(你有衣蛾字面數值,帶有特別含義,創造一個常量,根據其意義爲他命名,並將上述的字面值替換爲這個常量)ci
10.encapsulate field(封裝字段)(你的類中存在一個public字段,將他申明爲private 而且提供相應的訪問函數)
11.encapsulate collection(封裝集合)(有一個函數返回一個集合,讓這個函數返回該集合的一個只讀副本,並在這個類中提供添加移除集合元素的函數)
12.replace record with data class(數據類取代記錄),好比查詢數據庫的時候,使用類來替代記錄會更好)
13.replace type code with class(類取代類型碼),類之中有一個數值類型碼,可是它並不影響類 的行爲。用一個新的類來替換該數值碼)
14.replace type code with subclass (子類取代類型碼)(你有一個不可變的類型碼他會影響類的行爲,子類取代這個類型碼)
15.replace type code with state/strategy(state/strategy取代類型碼)(你有一個類型碼,它會影響類的行爲,但你沒法經過繼承來消除它。以狀態對象取代類型碼)
作法:在超類中創建一個查詢函數用於返回狀態碼,在每一個子類中重寫該函數,返回確切的狀態碼,在原類中創建一個字段,來保存新建的狀態對象,調整原類中負責查詢類型碼的函數,把查詢動做轉發給狀態對象,調整原類中爲類型碼設置的函數,吧一個恰當的狀態對象子類賦值給保存狀態對象的那個字段。
16.replace subclass with fields(字段取代子類)(你的各個子類惟一差異只在返回常量數據的函數身上,修改這些函數使他們返回超類中的某個字段,而後銷燬子類)