重構筆記 移除中間人

2021-06-28 21:45:19 字數 1739 閱讀 3848

下面讓我們來學習這種重構手法吧。

發現:某個類做了過多的簡單委託動作。

解決:讓客戶直接呼叫受託類。

在「隱藏委託關係」中,談到了「封裝受託物件的好處」。但是這層封裝是需要付出代價的:每當客戶要使用受託類的新特性時,你就必須在伺服器端新增乙個簡單委託函式。但是,隨著受託類的特性越來越多,這一過程就會讓你變得痛苦。這時,服務類完全變成了乙個「中間人」,應該讓客戶直接呼叫受託類。

很難說在什麼情況下的隱藏才是比較合適的。但是,通過「隱藏委託關係」和「移除中間人」,就能夠很好的進行協調了。因為可以在系統執行過程中不斷進行調整。隨著系統的不斷變化,「隱藏程度」選取尺度也相應變化。三個月前恰如其分的封裝,現今可能會顯得笨拙。而重構的意義在於:永遠不必要為出現的問題說對不起——只要把出現問題的地方修補好就行了。

(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...