本章節介紹四種在現代軟體開發中極為常用的範式。它們分別解決了演算法抽象、語言靈活性、關注點分離以及系統解耦等關鍵問題。

1. 泛型範式:抽象你的演算法#

維度內容描述
目標分離演算法與其作用的資料結構
特徵演算法導向 (Algorithm-Oriented)
做法將資料結構一般化,使演算法能最大限度被重用
優勢在不犧牲效率下確保類型安全,打破資料類型壁壘並提升重用性

2. 超級範式:提升語言的級別#

元程式設計(Meta-programming)被稱為「超級範式」,意指編寫和操縱程式的程式

維度內容描述
核心定義被稱為「超級範式」,意指編寫和操縱程式的程式
結構對比傳統設計僅運算為動態,元程式設計則運算與程式結構皆為動態
核心精神將程式碼視為資料,賦予系統自覺性、自適應性與智慧性
  • Web 引擎:Servlet 引擎將 JSP 檔案動態轉換為 Java 程式碼
  • 現代框架:工具讀取設定檔或 Annotation(註解),自動產生樣板程式碼,減少人工編寫的繁瑣

3. 切面範式:多角度看問題#

切面導向程式設計(AOP, Aspect-Oriented Programming)是為了解決程式碼的紊亂、鬆散與重複問題。

AOP 術語核心定義與功能目的與價值
橫切關注點
(Cross-cutting)
散佈在多個模組中的共通邏輯 (如 Log、安全性、事務)解決程式碼的 「紊亂」與「重複」,讓主邏輯保持純粹
Advice (建議/增強)當切點觸發時,具體要執行的一段程式碼達成功能 「單一化」:將基礎功能從核心業務中剝離
Pointcut (切點)描述在哪些特定位置 (Join point) 插入 Advice達成功能 「正交化」:關注點間互不干擾,精確定位
Weaving (織入)將切面邏輯與主體程式碼結合的過程實現 「低耦合」:主程式不需知道切面存在,卻能獲得增強

AOP 與 OOP 的維度比較#

範式重用方向描述
OOP縱向重用沿著繼承樹(Inheritance Tree)進行父子類別的重用
AOP橫向重用跨越不同的類別與模組,提取共同邏輯進行重用

4. 事件驅動:有事我叫你,沒事別煩我#

事件驅動(Event-Driven)是種被動設計哲學,強調行為取決於外來的突發事件。

流程驅動 vs. 事件驅動#

  • 流程驅動 (Flow-Driven):主動 Polling(輪詢),行為取決於程式自身的主控權
  • 事件驅動 (Event-Driven):被動等待 Notification(通知)

事件的種類#

事件描述
底層/原生事件 (Native)直接由硬體觸發,例如滑鼠點擊或鍵盤輸入
語意事件 (Semantic)使用者的意圖行為,通常由多個底層事件組合而成
使用者自訂事件由開發者根據業務邏輯所定義的特定事件
合成事件程式設計師主動激發或模擬產生的事件

關鍵機制:回呼函數 (Callback)與 IoC#

普通函數 vs. 回呼函數
歸類普通函數回呼函數 (Callback)
呼叫方向高層模組直接呼叫低層模組低層模組透過主函數間接呼叫高層模組
邏輯結構線性呼叫,層級固定實現呼叫者與被呼叫者的邏輯解耦
非同步特性呼叫與執行同步進行採先註冊後呼叫模式,實現執行時間解耦

控制反轉 (IoC) 與依賴注入 (DI)#

這是現代框架的核心機制,旨在增強重用性與可擴充性。

描述
主題控制權與依賴關係的處理
目的達成模組間的解耦
方法透過反轉(Inversion)機制,將控制權由開發者移交給框架或容器
手段實施依賴注入(DI),由外部動態提供依賴物件
原則透過抽象介面實作,確保細節依賴於抽象

事件驅動式模型運作流程#

該模型具備被動性(由 IoC 達成)與非同步性(適合處理耗時任務)。

階段運作行為
註冊事件處理器(Handler)在關注的事件來源(Source)上完成掛載
觸發事件來源不定期地產生並發表事件物件
管理管理器執行事件的轉換、合併、入列及分派(Dispatch)
處理事件處理器接收分派的事件並執行對應業務邏輯

它也是架構設計中 MVC 模式 的基礎。