OOP vs FP:模式的兩種形態

★★★★Studied

From程式設計範式與物件導向思維Functional DesignImplementation Patterns

📚 From the Books

OOP vs FP:模式的兩種形態ConceptParadigms

很多 GoF 模式是在補「物件導向語言缺少一級函數」的洞。換到函數式語言,同樣的意圖往往直接用高階函數、不可變資料、pattern matching 就達成了——模式沒消失,只是換了形態。

🧠 When to Use

TIP

這頁不是「哪個範式比較好」,而是幫你判斷:手上的問題,用「物件 + 多型」表達比較自然,還是用「函數 + 資料變換」比較自然。

⚖️ Structure & Variants

同一意圖、兩種形態對照
意圖OOP 形態FP 形態
可替換演算法Strategy(介面 + 實作類)傳一個函數
疊加行為Decorator(同介面包裝)高階函數 g(f) / middleware
依型別分派Visitor / 多型pattern matching / 代數資料型別
延遲建立Factory + 物件thunk / 惰性求值
通知Observer(註冊監聽者)stream / reactive / event as data
  • 重點不是「FP 不用模式」,而是一級函數讓很多模式縮成一行
什麼時候 OOP 形態仍然較好
  • 行為伴隨狀態與不變式、需要封裝(帳戶餘額、連線池)→ 物件較自然。
  • 需要一族相關操作的多型分派且型別開放擴充 → 介面 + 實作勝過巨大 match。
  • 團隊 / 既有程式庫是 OO 慣例時,硬塞 FP 風格反而增加認知成本。
什麼時候 FP 形態較好
  • 資料進來→變換→出去的管線(解析、轉檔、聚合)→ 純函數 + 不可變資料。
  • 邏輯無共享狀態、想好測試與並行 → 純函數沒有隱藏依賴。
  • 「行為當資料傳遞」是核心(callback、策略、事件)→ 一級函數直接表達。

⚠️ Misuse & Anti-patterns

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading