你須要爲提供服務的類增長一個函數。但你沒法修改這個類。在客戶類中創建一個函數,並以第一參數形式傳入一個服務類實例。 java
你正在使用一個類,它提供了全部須要的服務,可是不久以後,你有須要一項新的服務,這個類卻沒法供應。若是能夠修改源碼,那麼事情很簡單,你本身加一個新函數,若是不行,就得在客戶端編碼,補足你要的那個函數。 函數
若是客戶類只使用這項功能一次,這樣作沒什麼關係,可是若是你須要屢次使用這個函數,或者你發現本身爲一個服務類創建了大量外加函數,或者發現有許多類都須要一樣的外加函數,那就不該該再使用本項重構,而應該使用Introduce Local Extension. 編碼
可是不要忘記:外加函數終歸是權宜之計。若有可能,仍是儘可能把它放在該放的位置。 spa
1.在客戶類中創建一個函數,用來提供你須要的功能 code
這個函數不該該調用客戶類的任何特性。若是它須要一個值,把該值當作參數傳給它 get
2.以服務類實例做爲該函數的第一個參數 源碼
3.將該函數註釋爲:「外加函數 (foreign method),應在服務類實現」 io
這麼一來,若是未來有機會將外加函數搬移到服務類中時,你即可以輕鬆找出這些外加函數。 class
程序中,須要跨過一個收費週期。本來代碼像這樣: 重構
Date newStart = new Date (previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1);能夠將賦值運算右側代碼提煉到一個獨立函數中。這個函數就是Date 類的一個外加函數:
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); }