Middle Man

徵兆與症狀

如果一個類別只做一個動作,就是把任務委派給其他類別,那這個類別需要存在嗎?

出現原因

物件導向的其中一個特色是封裝(對外面世界隱藏內部細節),而封裝往往會伴隨著委派。而過度委派的情況下,就走歪了。

其他可能原因也有,當某個類別的任務漸漸搬移到其他類別時,原本類別到最後就會變成一個只委派任務的空殼。

處理方法

  • 如果發現類別內有半數以上的方法都在委派任務,可以用 Remove Middle Man 來移除。
  • 若只有部分方法使用委派,可以用 Inline Function,將方法搬回呼叫端。
  • 若有額外行為,可以用 Replace Superclass with DelegateReplace Subclass with Delegate 將委派任務搬到真實類別去。