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