- 作法(Mechanics)
- 加入[為群集添加(add),移除(remove)元素]的函數(shù).
- 將[用以保存群集]的值域初始化為一個空群集.
- 編譯.
- 找出[群集設(shè)值函數(shù)]的所有調(diào)用者.你可以修改那個設(shè)值函數(shù),讓它使用上述新建立的[添加/移除元素]函數(shù);也可以直接修改調(diào)用端,改讓它們調(diào)用上述新建立的[添加/移除元素]函數(shù).
- ==>兩種情況下需要用到[群集設(shè)值函數(shù)];(1)群集為空時;(2)準(zhǔn)備將原有群集替換為另一個群集時.
- ==>你或許會想運用Rename Method(273)為[群集設(shè)值函數(shù)]改名,從setXxx()改為initializeXxx()或replaceXxx().
- 編譯,測試.
- 找出所有[通過取值函數(shù)(getter)獲得群集并修改其內(nèi)容]的函數(shù).逐一修改這些函數(shù),讓它們改用[添加/移除](add/remove)函數(shù).每次修改后,編譯并測試.
- 修改完上述所有[通過取值函數(shù)(getter)獲得群集并修改群集內(nèi)容]的函數(shù)后,修改取值函數(shù)自身,使它返回該群集的一個只讀映件(read-only view).
- ==>在Java 2中,你可以使用Collection.unmodifiableXxx()得到該集群的只讀映件.
- ==>在Java 1.1中,你應(yīng)該返回群集的一份拷貝.
- 編譯,測試.
- 找出取值函數(shù)(getter)的所有用戶,從中找出應(yīng)該存在于[群集之宿主對象(host object)]內(nèi)的代碼.運用Extract Method(110)和Move Method(142)將這些代碼移到宿主對象去.
- 如果你使用Java 2,那么本項重構(gòu)到此為止.如果你使用Java 1.1,那么用戶也許會喜歡使用枚舉(enumeration).為了提供這個枚舉,你應(yīng)該這樣做.
- 修改現(xiàn)有取值函數(shù)(getter)的名字,然后添加一個新取值函數(shù),使其返回一個枚舉.找出舊取值函數(shù)的所有被使用點,將它們都改為使用新取值函數(shù).
- ==>如果這一步跨度太大,你可以先使用Rename Method(273)修改原取值函數(shù)的名稱;再建立一個新取值函數(shù)用以返回枚舉;最后再修改所有調(diào)用者,使其調(diào)用新取值函數(shù).
- 編譯,測試.
|