觀察者模式定義了物件之間的一對多依賴關係,當一個主題物件狀態改變時,所有依賴它的觀察者都會收到通知並自動更新。這是《Head First 設計模式》中最經典的模式之一,核心在於「發布-訂閱」機制。
想像你訂閱了《人民日報》:
在這個模型中,《人民日報》是主題,你和其他讀者是觀察者。觀察者不需要知道報社內部運作細節,只需等待報紙送達;報社也不關心具體哪個讀者,只管按名單投遞。
主題與觀察者之間是鬆耦合關係:
所有觀察者實作共同介面,主題僅依賴此介面發送通知,不直接依賴具體觀察者類別。正如報社只認「報刊介面」,不管訂閱者是個人、圖書館還是咖啡廳。
java.util.Observable 但違反「針對介面程式設計」原則,有局限性當系統中有多個物件需對某物件狀態變化做出反應,且不希望這些物件緊密耦合時,觀察者模式是最佳選擇。典型場景包括:GUI 事件處理、訊息推送系統、快取失效通知、股價監控等。