重構手法08:Replace Method with Method Object (以函數對象取代函數)

來源:互聯網
上載者:User

 

你有一個大型函數,其中對局部變數的使用使你無法採用 Extract Method (提煉函數)。將這個大型函數放進一個單獨對象中,如此一來局部變數就成了對象內的欄位。然後你可以在同一個對象中將這個大型函數分解為多個小型函數。

       動機:局部變數的存在會增加函數分解的難度。如果一個函數之中局部變數泛濫,那麼想分解這個函數是非常困難的。Replace Temp with Query (以查詢取代臨時變數)可以協助你減輕這一負擔,但有時候你會發現根本無法拆解一個需要拆解的函數。這種情況下,應該使用函數對象。

       做法:1、建立一個新類,根據待處理函數的用途,為這個類命名。

               2、在新類中建立一個const欄位,用以儲存原來大型函數所在的對象。我們將這個欄位稱為“來源物件”。同時,針對原函數的每個臨時變數和每個參數,在新類中建立一個對應的欄位儲存之。

              3、在新類中建立一個建構函式,接收來源物件及原函數的所有參數。

              4、在新類中建立一個compute()函數。

              5、將原函數的代碼複製到compute()函數中。如果需要調用來源物件的任何函數,請通過來源物件欄位調用。

       6、編譯。

       7、將舊函數的函數本體替換為這樣一條語句“建立上述新類的一個新對象,而後調用其中的compute()函數”。

       由於所有局部變數現在都成了欄位,所以你可以任意分解這個大型函數,不必傳遞任何參數。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.