DesignPattern
Memento — 不破壞封裝的快照與復原
Memento 模式以快照記錄物件狀態,在不暴露內部結構的前提下支援 undo/redo,Java record 是現代的輕量實作。
Interpreter — 為語言定義文法與解釋器
Interpreter 模式為簡單語法定義 AST 與解釋邏輯,適合小型 DSL;複雜語法請改用 ANTLR 等解析器工具。
Iterator — 迭代器模式
迭代器模式:提供統一介面循序存取集合元素,不暴露底層資料結構,Java Iterable/Iterator 即此模式的內建實作。
Visitor — 將演算法從物件結構抽離
訪問者模式透過雙分派將操作邏輯從物件結構抽離,適合在穩定的元素層級上頻繁新增操作
State — 讓物件隨狀態改變行為
State 模式將狀態相關行為封裝成獨立類別,消除大型 if-else/switch,物件轉換狀態時行為自動切換。
Command — 命令模式
命令模式:將請求封裝為物件,讓呼叫者與接收者解耦,並支援 undo/redo、排隊與日誌記錄。
Strategy — 策略模式
策略模式:定義一族可互換的演算法並各自封裝,讓演算法的變化獨立於使用它的客戶端,現代 Java 以 lambda 直接實現。
Observer — 一對多狀態變更通知
Observer 模式定義一對多依賴關係,Subject 狀態變更時自動通知所有訂閱者;Spring @EventListener 是現代首選實作。
Chain of Responsibility — 責任鏈模式
責任鏈模式:將請求沿處理者鏈傳遞,讓多個物件都有機會處理請求,避免發送者與接收者的強耦合。
Mediator — 以中介者解耦多方互動
Mediator 模式透過中介者集中管理物件間通訊,將網狀耦合降為星狀結構,Spring ApplicationEventPublisher 是其典型實踐。
Template Method — 模板方法模式
模板方法模式:在抽象父類定義演算法骨架,子類覆寫特定步驟而不改變整體流程,體現好萊塢原則。
Decorator — 動態疊加行為
Decorator 模式在不修改原始類別的前提下,透過包裝物件動態疊加行為,避免繼承導致的類別爆炸。
Bridge — 抽象與實作分離
Bridge 模式將抽象層與實作層分離,讓兩者可以獨立演進,解決多維度繼承導致的類別爆炸問題。
Facade — 子系統統一入口
Facade 模式為複雜子系統提供簡化的統一介面,降低客戶端與子系統的耦合,Spring Service 層即其典型應用。
Flyweight — 共享內部狀態節省記憶體
Flyweight 模式透過共享內部狀態降低大量相似物件的記憶體開銷,適用於字元渲染、粒子系統等場景。
Proxy — 控制物件存取的代理層
代理模式在不改變介面的情況下攔截對物件的存取,是 Spring AOP、JDK 動態代理、CGLIB 的底層機制
Composite — 樹狀結構統一操作
Composite 模式讓客戶端以一致方式處理單個物件與物件組合,適合樹狀結構如目錄、組織圖、UI 元件。
Adapter — 介面轉換橋接
Adapter 模式將不相容的介面轉換為客戶端期望的介面,常用於整合第三方 SDK 與遺留系統。
Prototype — 透過複製建立新物件
GoF Prototype 模式:比較淺拷貝與深拷貝的陷阱,說明為何應避免 Cloneable,以及拷貝建構子與 Jackson 序列化的現代替代方案
Builder — 分離複雜物件的建構與表示
GoF Builder 模式:用流式介面解決 telescoping constructor 問題,比較 Lombok @Builder 底層實作與 Java Records 的適用邊界
Factory Method — 讓子類決定實例化哪個類別
GoF Factory Method 模式:定義建立物件的介面,將具體類別的決策交給子類,並釐清與 Simple Factory、Abstract Factory、靜態工廠的差異
Singleton — 確保唯一實例
GoF Singleton 模式四種實作比較:Enum、Holder、DCL、Eager,說明 Spring Bean Singleton 與 GoF 的本質差異