《設計模式之禪》——觀察者模式

       定義:Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.(定義對象間一種一對多的依賴關係,使得每當一個對象改變狀態,則所有依賴於它的對象都會得到通知並被自動更新。)

       觀察者模式的通用類圖如圖所示。


       我們先來解釋一下觀察者模式的幾個角色名稱:

  • Subject被觀察者:定義被觀察者必須實現的職責,它必須能夠動態地增加、取消觀察者。它一般是抽象類或者是實現類,僅僅完成作爲被觀察這必須實現的職責:管理觀察者並通知觀察者。
  • Observer觀察者:觀察者接收到消息後,機進行update(更新方法)操作,對接收到的信息進行處理。
  • ConcreteSubject具體的被觀察者:定義被觀察者自己的業務邏輯,同時定義對哪些事情進行通知。
  • ConcreteObserver具體的觀察者:每個觀察在接收到消息後的處理反應是不同,各個觀察者有自己的處理邏輯。


1.觀察者模式的應用


1.1觀察者模式的優點


  • 觀察者和被觀察者之間是抽象耦合:如此設計,則不管是觀察者還是被觀察者都非常容易擴展,而且在Java中都已經實現的抽象層級的定義,在系統擴展方面更是得心應手。
  • 建立一套觸發機制。


1.2觀察者模式的缺點


       觀察者模式需要考慮一下開發效率和運行效率問題,一個被觀察者,多個觀察者,開發和調試就會比較複雜,而且在Java中消息的通知默認是順序執行,一個觀察者卡殼,會影響整體的執行效率。在這種情況下,一般考慮採用異步的方式。

       多級觸發時效率更是讓人擔憂,大家在設計時注意考慮。


1.3觀察者模式的使用場景


  • 關聯行爲場景。需要注意的是,關聯行爲是可拆分的,而不是“組合”關係。
  • 事件多級觸發場景。
  • 跨系統的消息交換場景,如消息隊列的處理機制。


1.4觀察者模式的注意事項


  • 廣播鏈的問題。
  • 異步處理問題。


其它設計模式內容戳這裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章