2010年6月20日 星期日

[DesignPattern] 觀察者模式 (Observer Pattern)

觀察者模式 (Observer Pattern) 定義了物件之間的一對多的關係,當一個物件 (subject/observable) 改變狀態,其他相依物件都會收到通知並做更新。

原則:
  • 設計時盡量讓需要互動的物間之間關係鬆綁(loose-coupling)。讓兩物件可以不知道彼此的實作細節,但透過已知的共通介面互動。

  • 例子:氣象觀測站
  • WeatherData 實作 Subject 介面(或者 java.util.* 中的 observable 介面)讓觀察者(Observer)可以隨時向他註冊(訂閱)新的消息通知,或者取消訂閱。一旦他的狀態改變時,會呼叫 Observer 的 update() 來通知他們有更新發生。
  • 消息的通知又可分為 push 與 pull 兩種,前者由 Subject 把所有資料廣播給所有 Observers,後者只是通知更新,Observers 自己用 Subject 提供的 getter 取得所需的資料。

  • 關係圖: