🎯 什麼情境該想到我
當你「打開一個類別,發現它大部分的方法都只是把呼叫原封不動轉交給另一個物件」的時候——它自己幾乎不做事,只當轉手。
⚙️ 怎麼用(步驟 / 公式)
這味道是什麼徵兆:封裝與委託是好東西,但過了頭就變成問題——當一個類別半數以上的方法都只是委派給別人,這層中間人就只剩間接的成本、沒帶來價值。
通常用哪些重構手法對治:
- 移除中間人(Remove Middle Man):讓呼叫端直接與真正做事的物件對話,拿掉多餘轉手。
- 以繼承取代委託 / 以委託取代子類(Replace Superclass with Delegate / Replace Subclass with Delegate):視關係本質,在繼承與委託之間調整結構。
- 若只有少數幾個委派方法麻煩,可內聯函式把它們併掉。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 委託本身不是壞事——為了隱藏委託(避免訊息鏈)而保留少量轉發是合理的。
- 中間人與訊息鏈是一體兩面:修訊息鏈可能製造中間人,反之亦然,要在兩者間取平衡點。
🔗 相關工具
- 訊息鏈 Message Chains(對治訊息鏈時要小心別做出中間人)
- 冗員元素 Lazy Element(只轉手的類別也接近沒價值的元素)
- 重構