下面讓我們來學習這種重構手法吧。
發現:某個類做了過多的簡單委託動作。
解決:讓客戶直接呼叫受託類。
在「隱藏委託關係」中,談到了「封裝受託物件的好處」。但是這層封裝是需要付出代價的:每當客戶要使用受託類的新特性時,你就必須在伺服器端新增乙個簡單委託函式。但是,隨著受託類的特性越來越多,這一過程就會讓你變得痛苦。這時,服務類完全變成了乙個「中間人」,應該讓客戶直接呼叫受託類。
很難說在什麼情況下的隱藏才是比較合適的。但是,通過「隱藏委託關係」和「移除中間人」,就能夠很好的進行協調了。因為可以在系統執行過程中不斷進行調整。隨著系統的不斷變化,「隱藏程度」選取尺度也相應變化。三個月前恰如其分的封裝,現今可能會顯得笨拙。而重構的意義在於:永遠不必要為出現的問題說對不起——只要把出現問題的地方修補好就行了。
(1)建立乙個函式,用以獲得受託物件。
(2)對於每個委託函式,在服務類中刪除該函式,並讓需要呼叫該函式的客戶轉為呼叫受託物件。
(3)處理每個委託函式,編譯,測試。
class person
}class department
}
為了找出某人的經理,客戶**可能這樣寫:
manager = john.getmanager();
像這樣,使用和封裝department都很簡單。但是,如果大量函式都這麼做,就不得不在person之中安置大量委託行為。這時,就應該移除中間人。首先,在person中建立乙個函式用於獲得受託物件:
class person
}
然後,逐一處理每個委託函式。針對每乙個這樣的函式,要找出通過person使用的函式,並對其進行修改,是它首先獲得受託物件,然後直接使用後者:
manager = john.getdepartment().getmanager();
然後,就可以刪除person中的getmanager()函式。如果遺漏了什麼,編譯器會告知的。
為了方便起見,可能會保留一部分委託。此外,也可能希望對某些客戶隱藏委託關係,並讓另一些直接使用受託物件。
本文主要介紹了重構手法——移除中間人。該手法和「隱藏委託關係」正好相反,正是由於相反,才能夠在實際的應用中進行靈活的變通。可能一些委託關係需要保留,而另一些卻需要移除,讓客戶直接使用受託物件。這些都是可以隨之變通的。對於各種不同重構手法的使用,同樣沒有絕對的規定,都是需要依據實際靈活使用的。真所謂「唯變通才能立於不敗也」。
重構筆記——入門篇
重構筆記——**的壞味道(上)
重構筆記——**的壞味道(下)
重構筆記——構築測試體
重構筆記——提煉函式
重構筆記——內聯函式
重構筆記——內聯臨時變數
重構筆記——以查詢取代臨時變數
重構筆記——引入解釋性變數
重構筆記——分解臨時變數
重構筆記——移除對引數的賦值
重構筆記——以函式物件取代函式
重構筆記——替換演算法
重構筆記——搬移函式
重構筆記——搬移字段
重構筆記——提煉類
重構筆記——將類內聯化
重構筆記——隱藏"委託關係"
重構筆記——移除中間人
31天重構學習筆記29 去除中間人物件
摘要 由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2009年 10月份,由於當時沒有訂閱sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都在使用,只是我們沒有專門把...
31 天重構學習筆記29 去除中間人物件
摘要 由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2009年 10月份,由於當時沒有訂閱 sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都 在使用,只是我們沒有專...
中間人攻擊
正好在公司有機會玩玩內網滲透,於是實踐一下中間人攻擊 我所在的網段為10.0.100.0 24 攻擊者主機ip 10.0.100.133 受害者主機ip 10.0.100.136 閘道器 10.0.100.1 先用nmap掃瞄看看目前內網中在使用的主機ip 使用命令 nmap ss 10.0.100...