--- robots: noindex, nofollow tags: refactoring --- # Middle Man ![](https://i.imgur.com/8zidH4L.png) ## 徵兆與症狀 如果一個類別只做一個動作,就是把任務委派給其他類別,那這個類別需要存在嗎? ## 出現原因 物件導向的其中一個特色是封裝(對外面世界隱藏內部細節),而封裝往往會伴隨著委派。而過度委派的情況下,就走歪了。 其他可能原因也有,當某個類別的任務漸漸搬移到其他類別時,原本類別到最後就會變成一個只委派任務的空殼。 ## 處理方法 - 如果發現類別內有半數以上的方法都在委派任務,可以用 `Remove Middle Man` 來移除。 - 若只有部分方法使用委派,可以用 `Inline Function`,將方法搬回呼叫端。 - 若有額外行為,可以用 `Replace Superclass with Delegate` 或 `Replace Subclass with Delegate` 將委派任務搬到真實類別去。