觀察者模式,是一種非常常見的設計模式,在很多系統中隨處可見,尤其是涉及到資料狀態發生變化需要通知的情況下。
本文以abstractcursor為例子,展開分析。
觀察者模式,observer pattern,是乙個很實用的模式,本人曾經接觸到的各種平台以及曾經參與專案中列印模板直譯器中都用到了此模式。
1.意圖
定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。
熱門詞彙:依賴 發布-訂閱 事件 通知 更新 監聽
2.結構
這是乙個最簡單的觀察者模式,目標物件能夠新增和刪除觀察者,當自己某種狀態或者行為發生改變時,可通過notify通知註冊的觀察者進行更新操作。
分析abstractcursor的具體情況,我們發現實際工作有時需要對觀察者進行統一管理,甚至觀察者型別有很多種而又可以分成幾個系列,這個時候是要複雜的多,通過合理的分層這個問題很好解決。下面根據具體情況,我們畫出android中abstractcurosr中用到的觀察者模式結構圖:
觀察者分成了兩個系列。
public
abstract
class
abstractcursor
public
void
unregistercontentobserver(contentobserver observer)
} public
void
registerdatasetobserver(datasetobserver observer)
public
void
unregisterdatasetobserver(datasetobserver observer)
//2類通知方法
protected
void
onchange(boolean selfchange)
} }
protected
void
notifydatasetchange()
}
再看看observable類和datasetobservable類:
public
abstract
class observable
synchronized(mobservers)
mobservers.add(observer);
} }
public
void
unregisterobserver(t observer)
synchronized(mobservers)
mobservers.remove(index);
} }
public
void
unregisterall()
} }
和
public class
datasetobservable
extends
observable
} } //... ... (其他方法)
}
觀察者datasetobserver類是乙個抽象類:
public
abstract
class datasetobserver
}
所以我們具體看它的子類:
public
class
alphabetindexer
extends
datasetobserver
}
contentobserver也是類似。
4.效果
(1).行為型模式
(2).目標和觀察者間的抽象耦合(經典實現)。
(3).支援廣播通訊(相信這點android開發者看到後應該有啟發吧)。
(4).注意意外的更新,這也是觀察者更新進行管理的原因之一。
Android設計模式系列 觀察者模式
觀察者模式,是一種非常常見的設計模式,在很多系統中隨處可見,尤其是涉及到資料狀態發生變化需要通知的情況下。本文以abstractcursor為例子,展開分析。觀察者模式,observer pattern,是乙個很實用的模式,本人曾經接觸到的各種平台以及曾經參與專案中列印模板直譯器中都用到了此模式。1...
Android設計模式系列 觀察者模式
觀察者模式,是一種非常常見的設計模式,在很多系統中隨處可見,尤其是涉及到資料狀態發生變化需要通知的情況下。本文以abstractcursor為例子,展開分析。觀察者模式,observer pattern,是乙個很實用的模式,本人曾經接觸到的各種平台以及曾經參與專案中列印模板直譯器中都用到了此模式。1...
設計模式系列 觀察者模式
觀察者模式定義了物件之間的一對多依賴,讓多個觀察者物件同時監聽乙個主體物件。當主體物件發生變化時,它的所有依賴者 觀察者 都會收到通知並更新。觀察者模式主要用於在關聯行為之間建立一套觸發機制的場景,支援廣播通訊。觀察者模式也被稱為 發布 訂閱模式。場景 新聞社開發了一套新聞訂閱服務,他們會給每個訂閱...