Self Encapsulate Field (自封裝字段)

Summary:

你直接訪問一個字段,但與字段之間的耦合關係逐漸變得笨拙。爲這個字段創建取值/設值函數,而且只以這些函數來訪問字段。 函數

Motivation:

間接訪問變量的好處是,子類能夠經過覆寫一個函數而改變獲取數據的途徑;它還支持更靈活的數據管理方式,例如延遲初始化。直接訪問變量的好處則是:代碼比較容易閱讀。 測試

若是你想訪問超類中的一個字段,卻又想在子類中將對這個變量的訪問改成一個計算後的值,這就是最該使用Self Encapsulate Field的時候。「字段自我封裝」只是第一步。完成自我封裝後,就能夠在子類中根據本身的須要隨意覆寫取值/設值函數。 spa

Mechanics:

1. 爲帶封裝字段創建取值/設值函數。 對象

2.找出該字段的全部引用點,將它們所有改成調用取值/設值函數。 編譯器

若是引用點要讀取字段值,就將它替換爲調用取值函數;若是引用點要給字段賦值,就將它替換爲調用設置函數。 io

你能夠暫時將該字段更名,讓編譯器幫助你查找引用點。 編譯

3.將該字段聲明爲private。 變量

4.複查,確保找出全部引用點。 重構

5.編譯,測試。 構造函數

使用本項重構時,你必須當心對待「在構造函數中使用設值函數」的狀況。通常來講,設值函數被認爲應該在對象建立後才使用,因此初始化過程當中的行爲有可能與設值函數的行爲不一樣。這種狀況下,咱們能夠在構造函數中直接訪問字段或者單獨另建一個初始化函數。

相關文章
相關標籤/搜索