某個類作了過多的簡單委託動做。讓客戶直接調用受託類。 java
「封裝受託對象」有其好處,可是這層封裝也是要付出代價:每當客戶要使用受託類的新特性時,就必須在服務端添加一個簡單委託函數。隨着受託類的新特性愈來愈多,服務類徹底變成了一個「中間人」,此時就應該讓客戶直接調用受託類。 ide
1.創建一個函數,用以得到受託對象。 函數
2.對於每一個委託函數,在服務類中刪除該函數,並讓須要調用該函數的客戶轉爲調用受託對象。 測試
3.處理每一個委託函數後,編譯、測試 spa
咱們將使用以前用過的「人與部門」的例子。在上一項重構(Hide Delegate)結束時,Person將Department隱藏起來,爲找出某人的經理,客戶代碼可能這樣寫 code
manager = john.getManager();像這樣,使用和封裝Department都很簡單。但若是大量函數都這麼作,咱們就不得不在Person之中安置大量委託行爲。這就該是移除中間人的時候了。首先在Person中創建一個函數用於得到受託對象:
public class Person { Department department; public Department getDepartment() { return department; } ... }而後逐一處理每一個委託函數。針對每個這樣的函數,找出經過Person使用的函數,並對它進行修改,使它首先得到受託對象,而後直接使用後者:
manager = john.getDepartment().getManager();而後咱們就能夠刪除Person的getManager()函數。若是遺漏了什麼,編譯器會告訴咱們。