1. 程式人生 > >觀察者模式與釋出/訂閱模式的區別

觀察者模式與釋出/訂閱模式的區別

        不管是維基百科還是百度百科,搜尋觀察者模式,都會發現觀察者模式的定義是觀察者模式(有時又被稱為釋出/訂閱模式),即一個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實作事件處理系統。最開始老師讓我區別觀察者模式與釋出/訂閱模式,簡直無從下手。感覺明明就是一樣的,而且《設計模式》書中也很明確地給出了觀察者模式又稱為釋出/訂閱模式,但是後來查了很多資料、也問了老師之後發現觀察者模式與釋出/訂閱模式還是有區別的。

(1)觀察者模式本質上是一種物件行為模式,而 釋出/訂閱模式本質上是一種架構模式,強調元件的作用

(2)觀察者模式定義了物件間的一種一對多依賴關係,使得每當一個物件改變狀態,則所有依賴於它的物件都會得到通知並採用一種機制實現自動更新。觀察者模式的被觀察者物件即目標物件中保留了觀察者的集合,當被觀察者物件的狀態發生變化時,會遍歷觀察者物件集合,然後通知觀察者物件得到更新。而釋出/訂閱模式並不保留觀察者與被觀察者之間的訊息,類似一種生產者消費者問題。

生產者把資料放入緩衝區,消費者從緩衝區取出資料。釋出/訂閱模式強調元件的作用,生產者通過元件將資料推(push)送到緩衝區,通過元件通知消費者是否選擇將緩衝區的資料拉(pull)過來,即取出資料。釋出/訂閱模式很好地實現瞭解耦。比如彩信,在我們手機的客戶端獲取彩信簡訊後,並沒有獲取它的全部內容,當我們選擇獲取後,再從緩衝區裡將我們希望獲取的內容得到。

(3)觀察者模式多應用在微控制器,而釋出/訂閱模式更多地在分散式環境中應用。