在該函式最常引用的類中建立乙個有著類似行為的新函式。將舊函式變成乙個單純的委託函式,或是將舊函式完全移除。
動機:如果乙個類有太多行為,或如果乙個類與另乙個類有太多合作而形成高度耦合,我就會搬移函式。
使用另乙個物件的次數比使用自己所駐物件的次數還多。觀察呼叫它的那一端,它呼叫的那一端,以及繼承體系中它的任何乙個重定義函式。
做法:檢查源類中被源函式所使用的一切特性,考慮它們是否也該被搬移。
=》如果某個特性只被你打算搬移的那個函式用到,就應該將它一併搬移。如果另有其他函式使用了這個特性,你可以考慮將使用該特性的所有函式全都一併搬移。有時候,搬移一組函式比逐一搬移簡單些。
檢查源類的子類和超類,看看是否有該函式的其他宣告。
=》如果出現其他宣告,你或許無法進行搬移,除非目標類也同樣表現出多型性。
在目標類中宣告這個函式
=》你可以為此函式選擇乙個新名稱,對目標類更有意義的名稱。
將原函式的**複製到目標函式中。調整後者,使其能在新家中正常執行。
=》如果目標函式使用了源類中的特性,你的決定如何從目標函式引用源物件。如果目標類中沒有相應的引用機制,就把源物件的引用當做引數,傳給新建立的目標函式。
=》如果源函式包含異常處理,你得判斷邏輯上應該由哪個類來處理這一異常。如果應該由源類來負責,就把異常處理留在原地。
決定如何從源函式正確引用目標物件。
=》可能會有乙個現成的字段或函式幫助你取得目標物件。如果沒有,就看能否輕鬆建立乙個這樣的函式。如果還是不能,就得在源類中新建乙個欄位來儲存目標物件。這可能是乙個永久性修改,但你也可以讓它是暫時的,因為後續的其他重構專案可能會把這個新建字段去掉。
修改源函式,使之成為乙個純委託函式。
決定是否刪除源函式,或將它當做乙個委託函式保留下來。
如果要移除源函式,請將源類中對源函式的所有呼叫,替換為目標函式的呼叫。
舊**
class account...
double overdraftcharge()
else return _daysoverdrawn * 1.75;
}double bankcharge()
private accounttype _type;
private int _daysoverdrawn;
新**如果只有但特**叉。
class accounttype...
double overdraftcharge(int daysoverdrawn)
else return daysoverdrawn * 1.75;
}class account ..
double overdraftcharge()
class account...
double bankcharge()
如果有多特性和函式交叉
class accounttype...
double overdraftcharge(account account)
else return account.getdaysoverdrawn * 1.75;
}class account ..
double overdraftcharge()
class account...
double bankcharge()
CTS7 1 GTS7 1 詳細測試步驟
cts 測試 1 首先恢復出廠 2 設定手機 連線外網 插入sim卡,開啟移動資料 開啟藍芽 顯示中睡眠時間選擇最大 豎屏 語言us 鍵盤google 鍵盤 開啟定位,高精度 安全中鎖屏選擇 none 時間將自動定日期和時間關閉,選擇太平洋時區,24小時制開啟 開發者模式中開啟 stay awake...
過濾 基礎 7 1
生成過濾裝置 ntstatus iocreatedevice inpdriver object driverobject,inulong deviceextensionsize,in punicode string devicename optional,in device type devicet...
7 1 迴圈練習
1.1 求 1 3 5 7 99 的和值 實現 要求 計算1 100之間的所有的奇數和 1 3 5 7.99 有1個資料,從0變到100 迴圈 int 0 100 從0 100,範圍內,找到奇數 數 2 1 奇數 所有的奇數求和計算 需要變數,儲存奇數的求和 實現步驟 1.程式可以使用到的資料,預先...