天天看點

Inline Method(将函數内聯化)

int getRation()

{

 return ( moreThanFiveLateDeliveries() ) ? 2 : 1;

}

boolean moreThanFiveLateDeliveries()

{

 return _numberOfLateDeliveries > 5;

}

==>

int getRatiog()

{

 return ( _numberOfLateDeliveries  > 5 ) ? 2 : 1;

}

一、動機

主要用在你手上有一群組織不甚合理的函數。你可以将它們都inline到一個大型函數中,再從中提煉出組織合理的小型函數。實施Replace Method with Method Object 之前先這麼做,往往可以獲得不錯的效果。

二、作法

1、檢查函數,确定它不具多态性,如果subclass繼承了這個函數,就不要将此函數inline化,因為subclass無錫覆寫一個根本不存在的函數。

2、找出這個函數的所有被調用點

3、将這個函數的所有被調用點都替換為函數本體(代碼)

4、編譯、測試

5、删除該函數的定義

對于遞歸調用、多傳回點、inlining至另一個對象中而該對象并無提供通路函數,此時不應該使用這個重構手法。