觀察者模式(有時又被稱爲發佈-訂閱模式、模型-視圖模式、源-收聽者模式或從屬者模式)是軟件設計模式的一種。
定義:一個目標物件管理全部相依於它的觀察者物件,而且在它自己的狀態改變時主動發出通知。這一般透過呼叫各觀察者所提供的方法來實現。此種模式一般被用來實做事件處理系統
設計模式
觀察者設計模式定義了對象間的一種一對多的依賴關係,以便一個對象的狀態發生變化時,全部依賴於它的對象都獲得通知並自動刷新。
性能
觀察者模式的優勢:設計
1.觀察者增長或刪除無需修改主題的代碼,只需調用主題對應的增長或者刪除的方法便可。對象
2.主題只負責通知觀察者,但無需瞭解觀察者如何處理通知。blog
3.觀察者只需等待主題通知,無需觀察主題相關的細節。事件
4.因爲被動接受,正常狀況下不會錯過主題的改變通知。而主動獲取的話,因爲時機選取問題,可能致使錯過某些狀態。軟件
缺點:垃圾回收
1.主題持有觀察者的引用,若是未正常處理從主題中刪除觀察者,會致使觀察者沒法被回收。循環
2.若是觀察者具體實現代碼有問題,會致使主題和觀察者對象造成循環引用,在某些採用引用計數的垃圾回收器可能致使沒法回收。引用
觀察者模式
http://www.imooc.com/article/12017
http://www.imooc.com/article/11579