7 1 move method 搬移函式

2021-06-01 00:08:55 字數 1677 閱讀 5282

在該函式最常引用的類中建立乙個有著類似行為的新函式。將舊函式變成乙個單純的委託函式,或是將舊函式完全移除。

動機:如果乙個類有太多行為,或如果乙個類與另乙個類有太多合作而形成高度耦合,我就會搬移函式。

使用另乙個物件的次數比使用自己所駐物件的次數還多。觀察呼叫它的那一端,它呼叫的那一端,以及繼承體系中它的任何乙個重定義函式。

做法:檢查源類中被源函式所使用的一切特性,考慮它們是否也該被搬移。

=》如果某個特性只被你打算搬移的那個函式用到,就應該將它一併搬移。如果另有其他函式使用了這個特性,你可以考慮將使用該特性的所有函式全都一併搬移。有時候,搬移一組函式比逐一搬移簡單些。

檢查源類的子類和超類,看看是否有該函式的其他宣告。

=》如果出現其他宣告,你或許無法進行搬移,除非目標類也同樣表現出多型性。

在目標類中宣告這個函式

=》你可以為此函式選擇乙個新名稱,對目標類更有意義的名稱。

將原函式的**複製到目標函式中。調整後者,使其能在新家中正常執行。

=》如果目標函式使用了源類中的特性,你的決定如何從目標函式引用源物件。如果目標類中沒有相應的引用機制,就把源物件的引用當做引數,傳給新建立的目標函式。

=》如果源函式包含異常處理,你得判斷邏輯上應該由哪個類來處理這一異常。如果應該由源類來負責,就把異常處理留在原地。

決定如何從源函式正確引用目標物件。

=》可能會有乙個現成的字段或函式幫助你取得目標物件。如果沒有,就看能否輕鬆建立乙個這樣的函式。如果還是不能,就得在源類中新建乙個欄位來儲存目標物件。這可能是乙個永久性修改,但你也可以讓它是暫時的,因為後續的其他重構專案可能會把這個新建字段去掉。

修改源函式,使之成為乙個純委託函式。

決定是否刪除源函式,或將它當做乙個委託函式保留下來。

如果要移除源函式,請將源類中對源函式的所有呼叫,替換為目標函式的呼叫。

舊**

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.程式可以使用到的資料,預先...