<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### Remove Middle Man(移除中間人) 某個class做了過多的簡單委托動作(simple delegation)。 讓客戶直接調用delegate(受托類)。 ![](https://box.kancloud.cn/2016-08-15_57b1b56c92b3d.gif) **動機(Motivation)** 在Hide Delegate的「動機」欄,我談到了「封裝 delegated object(受托對 象)」的好處。但是這層封裝也是要付出代價的,它的代價就是:每當客戶要使用 delegate(受托類)的新特性時,你就必須在server 端添加一個簡單委托函數。隨著delegate的特性(功能)愈來愈多,這一過程會讓你痛苦不己。server 完全變成了一 個「中間人」,此時你就應該讓客戶直接調用delegate。 很難說什么程度的隱藏才是合適的。還好,有了Hide Delegate和Remove Middle Man,你大可不必操心這個問題,因為你可以在系統運行過程中不斷進行調整。隨著系統的變化,「合適的隱藏程度」這個尺度也相應改變。六個月 前恰如其分的封裝,現今可能就顯得笨拙。重構的意義就在于:你永遠不必說對不起——只要把出問題的地方修補好就行了。 **作法(Mechanics)** - 建立一個函數,用以取用delegate(受托對象)。 - 對于每個委托函數(delegate method),在server中刪除該函數,并將「客戶對該函數的調用」替換為「對delegate(受托對象)的調用」。 - 處理每個委托函數后,編譯、測試。 **范例(Examples)** 我將以另一種方式使用先前用過的「人與部門」例子。還記得嗎,上一項重構結束時,Person將Department隱藏起來了: ~~~ class Person... Department _department; public Person getManager() { return _department.getManager(); class Department... private Person _manager; public Department (Person manager) { _manager = manager; } ~~~ 為了找出某人的經理,客戶代碼可能這樣寫: ~~~ manager = john.getManager(); ~~~ 像這樣,使用和封裝Department都很簡單。但如果大量函數都這么做,我就不得不在Person之中安置大量委托行為(delegations)。這就是移除中間人的時候了。 首先在Person建立一個「受托對象(delegate)取得函數」: ~~~ class Person... public Department getDepartment() { return _department; } ~~~ 然后逐一處理每個委托函數。針對每一個這樣的函數,我要找出通過Person使用的函數,并對它進行修改,使它首先獲得受托對象(delegate),然后直接使用之: ~~~ manager = john.getDepartment().getManager(); ~~~ 然后我就可以刪除Person的getManager() 函數。如果我遺漏了什么,編譯器會 告訴我。 為方便起見,我也可能想要保留一部分委托關系(delegations)。此外我也可能希望對某些客戶隱藏委托關系,并讓另一些用戶直接使用受托對象。基于這些原因,一些簡單的委托關系(以及對應的委托函數)也可能被留在原地。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看