1 3重構 第一章

2021-08-15 10:32:10 字數 2151 閱讀 4976

搬移「金額計算」**

接1.2,觀察amountfor()(計算金額)使用了來自rental(租賃實體)類的資訊,卻沒有使用來自customer類的資訊。

這就使我們懷疑它是否被放錯了位置。絕大多數情況下,函式應該放在它所使用的資料的所屬物件內,所以amountfor()應該從customer(顧客實體)類中移到rental(租賃實體)類去。

為了這麼做,我要運用move method(搬移函式)。首先把**複製到rental類,調整**使之適應新家,然後重新編譯。

class rental...

// 計算金額

public double getcharge()

break;

case movie.new_release:

result += get_dayrented() * 3;

break;

case movie.childrens:

result += 1.5;

if (get_dayrented() > 3)

break;

} return result;

}

在這個例子裡,「適應新家」意味著要去掉引數。此外,還要在搬移的過程中更改函式名稱。然後改變customer.amountfor()函式內容,使它委託呼叫新的函式即可:

class customer...

private double amountfor(rental arental)

然後編譯並測試,看看有沒有破壞什麼東西。

接下來找到程式中對於舊函式的引用點,並修改它們,讓它們改用新函式。

public string statement()

// 顯示憑條

result += "\t"+each.get_movie().get_title()+"\t"+string.valueof(thisamount)+"\n";

totalamount += thisamount; }

// 組裝頁尾

result += "amount owed is "+string.valueof(totalamount)+"\n";

result += "you earned "+string.valueof(frequentrenterpoints)+" frequent renter points";

return result;

}

最終的uml

至此,對於rental.getcharge()的修改暫時終止,讓我們回到customer.statement()函式。通過觀察,發現thisamount(臨時變數-某一類影片的總金額)如今變的多餘了。他接受each.getcharge()的執行結果,然後就不會再有任何改變。所以可以運用replace temp with query(以查詢取代臨時變數)把thisamount除去:

class customer...

public string statement()

// 顯示憑條

result += "\t"+each.get_movie().get_title()+"\t"+string.valueof(each.getcharge())+"\n";

totalamount += each.getcharge(); }

// 組裝頁尾

result += "amount owed is "+string.valueof(totalamount)+"\n";

result += "you earned "+string.valueof(frequentrenterpoints)+" frequent renter points";

return result;

}

修改完事,立即編譯測試,保證沒有破壞任何東西。

臨時變數往往會引發問題,他們會導致大量引數被傳來傳去,而其實完全沒有這種必要。當然除去臨時變數也會引發問題,如上述修改,會導致查詢兩次的效能問題,但這個問題可以在rental中很好的被優化,此處不做說明。

第一章課後習題1 3

1.3 只使用處理i o的printdigit方法,編寫一種方法以輸出任意double型量 可以是負值 package com.algorithm.chapterone 只使用處理i o的printdigit方法,編寫一種方法以輸出任意double型量 可以是負值 author gao rongzh...

python第一章筆記 第一章 基礎

參與除法的兩個數中有乙個數為浮點數,結果也為浮點數 如 1.0 2,1 2.0,1.0 2.0 python print 1.0 2 結果 0.5 print 1 2.0 結果 0.5 print 1.0 2.0 結果 0.5 整數 整數,計算結果的小數部分被截除,只保留整數部分 不會四捨五入 如 ...

重構第一章 重構的第乙個案例

這一章通過講解租碟的案例來初步解釋了重構的意義,有些問題何老師已經講過了,比如說變數命名,分割 等等 1.1 起點 如果你發現自己需要為程式新增乙個特性,而 結構使你無法很方便地那麼做,那就先重構那個程式,使特性的新增比較容易進行,然後再新增特性。1.2 重構的第一步 測試 每當我要進行重構的時候,...