簡化函數(shù)調(diào)用
10.1 Rename Method (函數(shù)改名)
函數(shù)的名稱未能揭示函數(shù)的用途
修改函數(shù)名稱
將復雜的處理過程分解成小函數(shù), 小函數(shù)要用好, 必須要有一個好命名, 不是會適得其反.
你不會一次就把名字起好, 大膽的更改吧.
10.2 Add Parameter (添加參數(shù))
某個函數(shù)需要從調(diào)用端得到更多信息
為此函數(shù)添加一個對象參數(shù), 讓該對象帶進函數(shù)所需信息
添加新參數(shù)的時候你應該考慮引入對象參數(shù)
10.3 Remove Parameter (移除參數(shù))
函數(shù)本體不再需要某個參數(shù)
將該參數(shù)去除
程序員常常喜歡添加參數(shù), 卻往往不愿意去除它們.
10.4 Separate Query from Modified (將查詢函數(shù)和修改函數(shù)分離)
某個函數(shù)即返回對象狀態(tài)值, 有修改對象狀態(tài)
建立兩個不同的函數(shù), 其中一個負責查詢, 另一個負責修改.
- 記住函數(shù)的功能要單一, 如果你在多線程操作的話, 你會遇到麻煩.
10.5 Parameterize Method (另函數(shù)攜帶參數(shù))
若干函數(shù)做了類似的工作, 但在函數(shù)本體中卻包含了不同的值
建立單一函數(shù), 以參數(shù)表達那些不同的值
10.6 Replace Parameter with Explicit Method (以明確函數(shù)取代參數(shù))
你有一個函數(shù), 其中完全取決于參數(shù)值而采取不同行為
針對該參數(shù)的每一個可能值, 建立一個獨立函數(shù)
10.7 Preserve Whole Object (保存對象完整)
你從某個對象中取出若干值, 將它們作為某一次函數(shù)調(diào)用時的參數(shù)
改為傳遞整個對象
- 可以使得參數(shù)列更固定. 往往還能提高代碼的可讀性.
- 但如果你傳遞的是整個對象, 被調(diào)用函數(shù)所在的對象就需要依賴參數(shù)對象. 如果這會使得你的依賴結(jié)構(gòu)惡化, 那么就不要使用此項重構(gòu).
10.8 Replace Parameter with Method (以函數(shù)取代參數(shù))
對象調(diào)用某個函數(shù), 并將所得結(jié)果作為參數(shù), 傳遞給另一個函數(shù), 而接受該參數(shù)的函數(shù)本身也能夠調(diào)用前一個函數(shù).
讓參數(shù)接受者去除該項參數(shù), 并直接調(diào)用前一個函數(shù).
10.9 Introduce Parameter Object (引入?yún)?shù)對象)
某些參數(shù)總是很自然地同時出現(xiàn)
以一個對象取代這些參數(shù)
當你把參數(shù)組織到一起之后, 往往很快可以發(fā)現(xiàn)一些可被移至新建類的行為.
10.10 Remove Setting Method (移除設值函數(shù))
類中的某個字段應該在對象創(chuàng)建時被設值, 然后就不再改變
取代該字段的所有設值函數(shù)
10.11 Hide Method (隱藏函數(shù))
有一個函數(shù), 從來沒有被其他任何類用到
將這個函數(shù)修改為private
10.12 Replace Constructor with Factory Method (用工程函數(shù)取代構(gòu)造函數(shù))
你希望在創(chuàng)建對象時不僅僅是做簡單的構(gòu)建動作
將構(gòu)造函數(shù)替換為工廠函數(shù)
- 在派生子類的過程中以工廠函數(shù)取代類型碼.
10.13 Encapsulate Downcast (封裝向下轉(zhuǎn)型)
某個函數(shù)返回的對象, 需要由函數(shù)調(diào)用者執(zhí)行向下轉(zhuǎn)型
將向下轉(zhuǎn)型動作移到函數(shù)中
10.14 Replace Error Code with Exception (以異常取代錯誤碼)
某個函數(shù)返回一個特定的代碼, 用以表示某種錯誤情況
改用異常
10.15 Replace Exception with Test (以測試取代異常)
面對一個調(diào)用者可以預先檢查的條件, 你拋出一個異常.
修改調(diào)用者, 使它在調(diào)用函數(shù)之前先做檢查
不要濫用異常.