🎯 什麼情境該想到我
當你發現「好幾個子類別各自有一份內容相同(或幾乎相同)的方法」的時候——改動一處就得記得同步其他每一份,重複散落在繼承體系裡。
⚙️ 怎麼用(步驟 / 公式)
意圖:把各子類別重複的方法上移到共同父類別,消除重複。以後只需維護一份,邏輯也集中在一處。相關的還有「欄位上移」與「建構式本體上移」,一併把共通的資料與初始化搬上去。
小步安全進行:
- 檢查各子類別中這些方法是否真的完全等價;若只是相似,先重構到彼此一致(統一參數、統一其引用的欄位名)。
- 若方法引用了子類別才有的欄位或方法,先把那些欄位/方法一併上移,或在父類別宣告為抽象。
- 把其中一份方法搬進父類別。
- 執行測試。
- 逐一刪除其他子類別中重複的那份方法,每刪一個就測一次。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 若各子類別的方法只是「看起來像」但語意其實不同,上移會強行綁死本該獨立演化的邏輯——不要為了消重複而合併不同概念。
- 方法依賴大量子類別專屬狀態時,上移前得先處理那些依賴,成本可能不划算。
🔗 相關工具
- 提煉超類 Extract Superclass(沒有現成父類別時,先抽一個再上移)
- 以多型取代條件式 Replace Conditional with Polymorphism(上移共同框架後,讓子類覆寫差異部分)
- 重構