- 作法(Mechanics)
- 找出[你想去除的指針]的保存值域,檢查它的每一個(gè)用戶,判斷是否可以去除該指針.
- ==>不但要檢查[直接讀取點(diǎn)],也要檢查[直接讀取點(diǎn)]的調(diào)用函數(shù).
- ==>考慮有無(wú)可能不通過(guò)指針函數(shù)取得[被引用對(duì)象](referred object).如果有可能,你就可以對(duì)取值函數(shù)(getter)使用Substitute Algorithm(139).從而讓客戶在沒有指針的情況下也可以使用該取值函數(shù).
- ==>對(duì)于使用該值域的所有函數(shù),考慮將[被引用對(duì)象](referred object)作為引數(shù)(argument)傳進(jìn)去.
- 如果客戶使用了取值函數(shù)(getter),先運(yùn)用Self Encapsulate Field(171)將[待除值域]自我封裝起來(lái),然后使用Subsitute Algorithm(139)對(duì)付取值函數(shù),令它不再使用該(待除)值域.然后編譯,測(cè)試.
- 如果客戶并使用取值函數(shù)(getter),那就直接修改[待除值域]的所有被引用點(diǎn):改以其他途徑獲得該值域所保存的對(duì)象.每次修改后,編譯并測(cè)試.
- 如果已經(jīng)沒有任何函數(shù)使用該(待除)值域,移除所有[對(duì)該值域的更新邏輯],然后移除該值域.
- ==>如果有許多地方對(duì)此值域賦值,先運(yùn)用Self Encapsulate Field(171)使這些地點(diǎn)改用同一個(gè)設(shè)值函數(shù)(setter).編譯,測(cè)試.而后將這個(gè)設(shè)值函數(shù)的本體清空.再編譯,再測(cè)試.如果這些都可行,就可以將此值域和其設(shè)值函數(shù),連同對(duì)設(shè)值函數(shù)的所有調(diào)用,全部移除.
- 編譯,測(cè)試.