《重構(gòu)》讀書筆記 第八章

重新組織數(shù)據(jù)

8.1 Self Encapsulate Field (自封裝字段)

  • 為字段建立取值/設值函數(shù),并且只以這些函數(shù)來訪問字段

間接訪問變量的好處:

  1. 子類可以通過腹瀉一個函數(shù)二改變獲取數(shù)據(jù)的途徑
  2. 支持更靈活的數(shù)據(jù)管理方式疙驾,如延時初始化

這個重構(gòu)手法的適用范圍:
想訪問超類中的一個字段拆内,卻又想在子類中將對這個變量的訪問改為一個計算后的值

8.2 Replace Data Value With Object (以對象取代數(shù)據(jù)值)

當某個類中的數(shù)據(jù)項隨著功能擴展越來越多架谎,應該將一些數(shù)據(jù)和行為一起使用的數(shù)據(jù)項封裝起來

這種情況特別常見株汉,幾乎是隨著功能擴展出現(xiàn)的必然情況厨姚,隨之出現(xiàn)的就是重復代碼依戀情結(jié)這兩個代碼壞味道。

8.3 Change Value to Reference(將對象改為引用)

這條重構(gòu)手法在于避免重復創(chuàng)建對象炊琉,對于意義完全相同的對象杰赛,應該使用同一個值。

手法:
使用工廠模式創(chuàng)建對象兽泄,使用集合對創(chuàng)建的對象進行緩存

最近在做的需求中漓概,使用ARouter獲取Service的功能,ARouter對Service的處理就是這種手法

但是引申出的問題就是想獲取兩個不同對象時反而比較麻煩病梢,個人感覺可以在獲取對象時添加是否使用緩存對象的選擇

8.4 Change Reference to Value(將引用對象改為值對象)

和8.3相反垛耳,當我們需要每次都獲取不同對象時,使用此手法

8.5 Replace Array with Object (以對象取代數(shù)據(jù))

此手法適用于一個數(shù)組中飘千,每條數(shù)據(jù)均代表不同含義的情況

新建一個類表示數(shù)據(jù)所擁有的信息,逐一為·數(shù)組元素添加取值/設值函數(shù)栈雳,根據(jù)元素的用途护奈,為這些函數(shù)命名。

此手法的意義在于將意義不明確的數(shù)組下標改為有意義的函數(shù)名

8.6 Duplicate Observed Data (復制 “被監(jiān)視對象”)

其實就是將Model層和View層隔離哥纫。書中使用觀察者模式對View進行更新霉旗。

目前Anroid似乎已經(jīng)有類似 DataBinding LiveData這種更現(xiàn)代的實現(xiàn)

8.7 Change Unidirectional Association to Bidirectional (將單向關聯(lián)改為雙向關聯(lián))

兩個類都需要使用對方特性,但其間只有一條單向連接。添加一個反向指針厌秒,并使修改函數(shù)能夠同時更新兩條鏈接读拆。

8.8 Change Bidirectional Association to Unidirectional (將單向關聯(lián)改為雙向關聯(lián))

兩個類之間有雙向關聯(lián),但其中一個類如今不在需要另一個類的特性鸵闪。

8.9 Replace Magic Number With Symbolic Constant(以字面常量取代魔法數(shù))

這個好理解檐晕,就是代碼里不要有魔法數(shù),不好理解

8.10 Encapsulate Field (封裝字段)

將public 改為private 提供函數(shù)對其訪問

8.11 Encapsulate Collection (封裝集合)

讓這個函數(shù)返回改集合的一個只讀副本蚌讼,并在這個類中提供添加辟灰,移除集合元素的函數(shù)

降低集合擁有者和用戶之間的耦合度

目前Gson源碼里使用的就是該手法
工程中sonar檢測也有該規(guī)則

8.12 Replace Record with Data Class (以數(shù)據(jù)類取代記錄)

創(chuàng)建一個類來記錄外來數(shù)據(jù),如數(shù)據(jù)庫記錄等

8.13 Replace Type Code with Class (以類取代類型碼)

類之中有一個數(shù)值類型碼篡石,但它并不影響類的行為
好處: 只要為這個類提供工廠函數(shù)芥喇,你就可以始終保證只有合法的實力才被創(chuàng)建出來塔橡,而且它們都會被傳遞給正確的宿主對象褐啡。

8.14 Replace Type Code with Subclassed(以子類取代類型碼)

類中有一個不可變的類型碼,但是會影響類的行為嫉柴,可以用子類的方式取代該類型碼胖眷,并將影響類行為的代碼移動到子類中

8.15 Replace Type Code with State/Strategy(以State/Strategy取代類型碼)

有一個類型碼武通,它會影響類的行為,但是無法通過繼承去消除它瘦材,可以使用策略模式或者狀態(tài)模式去重構(gòu)

8.16 Replace Subclass with Fields (以字段取代子類)

當某個類的各個子類的唯一差別只在“返回常量數(shù)據(jù)“的函數(shù)身上厅须,那么就不需要子類化。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末食棕,一起剝皮案震驚了整個濱河市朗和,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌簿晓,老刑警劉巖眶拉,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憔儿,死亡現(xiàn)場離奇詭異忆植,居然都是意外死亡谒臼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門蜈缤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拾氓,“玉大人,你說我怎么就攤上這事底哥》抗伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵翰守,是天一觀的道長。 經(jīng)常有香客問我疲酌,道長蜡峰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任徐勃,我火速辦了婚禮,結(jié)果婚禮上僻肖,老公的妹妹穿的比我還像新娘。我一直安慰自己臀脏,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布秒啦。 她就那樣靜靜地躺著搀玖,像睡著了一般余境。 火紅的嫁衣襯著肌膚如雪灌诅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天猜拾,我揣著相機與錄音,去河邊找鬼顽聂。 笑死,一個胖子當著我的面吹牛紊搪,可吹牛的內(nèi)容都是我干的全景。 我是一名探鬼主播耀石,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼娶牌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诗良?” 一聲冷哼從身側(cè)響起鲁驶,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鉴裹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后径荔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡总处,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年睛蛛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忆肾。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡客冈,死狀恐怖旭从,靈堂內(nèi)的尸體忽然破棺而出场仲,到底是詐尸還是另有隱情,我是刑警寧澤燎窘,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站付鹿,受9級特大地震影響蚜迅,放射性物質(zhì)發(fā)生泄漏舵匾。R本人自食惡果不足惜谁不,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吵血。 院中可真熱鬧谎替,春花似錦蹋辅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弃锐。三九已至,卻和暖如春霹菊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浇辜。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工唾戚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叹坦。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像绪囱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鬼吵,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容