[大話設計模式] 重點筆記:觀察者模式 (Observer) (Publish/Subscribe)

  • 4285
  • 0
  • 2011-08-02

[大話設計模式] 重點筆記:觀察者模式 (Observer) (Publish/Subscribe)

[Ch.14]

原文定義:
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.

UML圖:
p.193 或參考這裡

使用時機:
當一個系統被分割成一系列相互協作的類別有一個不好的副作用,那就是需要額外維護物件間的一致性,但我們並不希望為了維持一致性而使各類別緊密耦合。因此,當系統中一個物件的改變需要同時改變其他一到多個物件時,就適合應用該模式。

模式特色:
在Subject類別中,將所有對Observer物件的參考保存在一個聚集中,以便在發生改變時能夠一一通知。

觀察者模式與仲介者模式的不同:
在我看完Observer模式和Mediator模式後,覺得他們有些相似之處,於是便著手找了一些資料來試圖釐清兩者的異同。
Observer和Mediator都是物件間拿來傳遞消息的,但其中Observer是以分散式的概念來達成,而Mediator則以集中式方式來達成。但, 因為看到GoF這段話:「Mediator can leverage Observer for dynamically registering colleagues and communicating with them. 」。又看到
這篇文章,感覺在實作上似乎又不是那麼的水火不容?!

觀察者模式的不足:
在實務上沒辦法確保每個類別都能實作Observer的Update方法。因此,在.NET中利用了委託技術來解決這樣的問題。

參考資料:
http://www.dofactory.com/Patterns/PatternObserver.aspx
http://www.javaworld.com.tw/jute/post/view?bid=44&id=12526&sty=2&age=0&tpg=9&ppg=1#12526
http://www.cnblogs.com/anders06/archive/2007/07/17/821483.html
http://www.dotspace.idv.tw/Jyemii/patternscolumn/articles/DesignPatternPart(3).htm
http://home.earthlink.net/~huston2/dp/observer.html