Remove Middle Man (移除中間人)

Summary: 

某個類作了過多的簡單委託動做。讓客戶直接調用受託類。 java

Motivation:

「封裝受託對象」有其好處,可是這層封裝也是要付出代價:每當客戶要使用受託類的新特性時,就必須在服務端添加一個簡單委託函數。隨着受託類的新特性愈來愈多,服務類徹底變成了一個「中間人」,此時就應該讓客戶直接調用受託類。 ide

Mechanics: 

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()函數。若是遺漏了什麼,編譯器會告訴咱們。
相關文章
相關標籤/搜索