簽章相同的方法不一定是壞事

重點在於:每個新方法是否都帶來顯著的功能。穿透型方法之所以糟,是因為它什麼都沒貢獻。

例外 1:分派器(Dispatcher)#

分派器(dispatcher)是一個方法,根據參數選擇要呼叫哪一個方法,然後把多數或全部參數丟給選中的方法。

  • 分派器與被呼叫方法的簽章常相同
  • 但分派器仍提供有用的功能:選擇

真實範例:Web 伺服器#

  • Web 伺服器收到 HTTP 請求後,分派器檢查 URL 並挑選適當的處理方法
  • 有些 URL 由「回傳磁碟檔案內容」處理;有些由「呼叫 PHP / JavaScript 程序」處理
  • 分派過程可能相當複雜,通常以一組規則對 URL 做匹配

例外 2:同介面的多種實作#

例如:作業系統中的磁碟驅動程式:

  • 每個驅動支援不同類型的磁碟
  • 但都實作同一個介面

為什麼這樣降低認知負擔#

同介面的多種實作降低了學習成本。

學會其中一個之後,其他的就不用重新學介面。

這類方法通常:

  • 位於同一層
  • 彼此之間不互相呼叫

一句話判準#

只要每個共用簽章的方法各自提供有用且彼此不同的功能,就 OK。穿透型方法之所以糟,是因為它只是搬參數