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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### Introduce Foreign Method(引入外加函數) 你所使用的server class需要一個額外函數,但你無法修改這個class。 在client class中建立一個函數,并以一個server class實體作為第一引數(argument) : ~~~ Date newStart = new Date (previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1); ~~~ ~~~ Date newStart = nextDay(previousEnd); private static Date nextDay(Date arg) { return new Date (arg.getYear(),arg.getMonth(), arg.getDate() + 1); } ~~~ **動機(Motivation)** 這種事情發生過太多次了:你正在使用一個class,它真的很好,為你提供了你想要的所有服務。而后,你又需要一項新服務,這個class卻無法供應。于是你開始咒罵:「為什么不能做這件事?」如果可以修改源碼,你便可以自行添加一個新函數; 如果不能,你就得在客戶端編碼,補足你要的那個函數。 如果client class只使用這項功能一次,那么額外編碼工作沒什么大不了,甚至可能根本不需要原本提供服務的那個class。然而如果你需要多次使用這個函數,你就得不斷重復這些代碼。還記得嗎,重復的代碼是軟件萬惡之源。這些重復性代碼應該被抽出來放進同一個函數中。進行本項重構時,如果你以外加函數實現一項功能, 那就是一個明確信號:這個函數原本應該在提供服務的(server)class中加以實現。 如果你發現自己為一個server class建立了大量外加函數,或如果你發現有許多classes都需要同樣的外加函數,你就不應該再使用本項重構,而應該使用 Introduce Local Extension。 但是不要忘記:外加函數終歸是權宜之計。如果有可能,你仍然應該將這些函數搬移到它們的理想家園。如果代碼擁有權(code ownership)是個需要考量的問題, 就把外加函數交給server class的擁有者,請他幫你在此server class中實現這個函數。 **作法(Mechanics)** - 在client class中建立一個函數,用來提供你需要的功能。 - 這個函數不應該取用client class的任何特性。如果它需要一個值,把該值當作參數傳給它。 - 以server class實體作為該函數的第一個參數。 - 將該函數注釋為:「外加函數(foreign method),應在server class實現。」 - 這么一來,將來如果有機會將外加函數搬移到server class中,你便可以輕松找出這些外加函數。 **范例(Examples)** 程序中,我需要跨過一個收費周期(billing period)。原本代碼像這樣: ~~~ Date newStart = new Date (previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1); ~~~ 我可以將賦值運算右側代碼提煉到一個獨立函數中。這個函數就是Date class的一個外加函數: ~~~ Date newStart = nextDay(previousEnd); private static Date nextDay(Date arg) { // foreign method, should be on date return new Date (arg.getYear(),arg.getMonth(), arg.getDate() + 1); } ~~~
                  <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>

                              哎呀哎呀视频在线观看