2011年4月19日 星期二

GoF Behavioral - The Observer Pattern


  • Intent


To define a one-to-many dependency so that when one object changes state, all its dependents are notified and updated automatically.

Java provides support for implementating the observer pateern via the java.util.Observer interface and the java.util.Observable class.

The Observer pattern is also known as Dependents or Publish-Subscribe

當我們試圖的想要解釋什麼是觀察者模式時,可以試著用報紙訂閱服務,以及出版者和訂閱者來描述這一切。

觀察者模式,定義了物件之間的一對多關係,如此一來當一個物件改變狀態時,其他相依者都會收到通知並且自動被更新。

那麼...在這裡什麼是一對多的關係? 這裡是表示 主題是具有狀態的物件,且可以控制這些狀態,也就是說有"一個"具有狀態的主題,而另一方面觀察者使用這些狀態,雖然這些狀態不屬於他們,依賴於主題物件告訴他們,這就產生了一個關係: 1 subject to N observers.


  • Benefits




  1. It abstracts the coupling between the subject and the observer.

  2. It provides support for broadcast-type communication.




  • Java內建的觀察者運作模式


內建的觀察者模式主要是由 java.util.Observable(主題) , java.util.Observer(訂閱/觀察者) 構築而成,當要觀察物件時,主題物件必須繼承Observer類別,並繼承到一些 add, delete , notify 觀察者的方法

Q 1: 如何把物件變成觀察者 ?

A : implements java.util.Observer,然後呼叫 Observable物件的 addObserver(),若不想再當觀察者時呼叫deleteObserver()

Q2 :觀察者如何送出通知?

A : setChanged(), then notifyObservers() or notifyObservers( Object arg )

Q3 : 觀察者如何接收通知?

A : update ( Observable o , Object arg), Object arg是被通知的觀察者


  • Class Diagram




[caption id="attachment_261" align="alignnone" width="527" caption="Observer Pattern"]Observer Pattern[/caption]

沒有留言: