觀察者模式解決「一組物件需在另一物件狀態改變時自動更新」的問題。典型場景如 MVC 的 Model-View、文檔-視圖架構。Java 在 java.util 提供內建支援:Observable 管理觀察者清單,Observer 定義 update() 回呼。
Observable 預設不通知觀察者,必須先呼叫 setChanged() 設定「已變更」旗標,再呼叫 notifyObservers() 觸發各觀察者的 update()。範例 BoxObserver 建立一個 BoxObservable(繼承 Observable 並覆寫 notifyObservers() 中呼叫 setChanged()),每個 OCBox(畫布方塊)實作 Observer 並向其註冊。
notifier.notifyObservers(this)update(),檢查是否鄰近被點擊方塊通知機制對具體 Observable 實作無依賴,未來可動態替換通知策略(如改用不同衍生類),體現模式「封裝變化」的精髓。