什麼是觀察者模式
所謂觀察者模式,就是定義對象間一種一對多的依賴關係,使得每當一個對象改變狀態,則所有依賴於他的對象都會得到通知並被自動更新的設計模式。
觀察者模式的實現方式
觀察者調用Observer接口,被觀察者調用Observable接口。當被觀察者有更新時,遍歷所有觀察者,這樣就實現了一對多的通知功能。
《西遊記》第一回孫悟空出世,馬上便被千里眼和順風耳報告給玉皇大帝,這就是一個典型的觀察者模式。
首先定義觀察者
public class Spy implements Observer { |
然後被觀察者是花果山
public class HuaguoMountain extends Observable { |
被觀察者發生變化
HuaguoMountain mountain = new HuaguoMountain(); |
Android源碼中的觀察者模式
(1)notifyDataSetChanged
無論ListView還是RecyclerView裏,notifyDataSetChanged方法都是至關重要的,這是最常見的觀察者模式。
(2)BroadcastReceiver
BroadcastReceiver是Android四大組件之一,也是一個典型的觀察者模式。
(3)EventBus
EventBus 是一個組件間通信框架,開發者在Activity、Fragment、Service、Thread之間傳遞消息時可以避免使用複雜的Intent、Handler和BroadCast
(4)RxJava
RxJava作爲同樣基於觀察者模式的組件間通信框架,要比EventBus的應用更廣泛。尤其它針對Android的擴展——RxAndroid完全可以替代AsycTask來完成各種異步操作,而且還有BindActivity和BindFragment方法來避免異步操作時的Activity和Fragment的生命週期問題。
Android開發中如何利用觀察者模式
(1)在觀察者模式中,觀察者和被觀察者之間是抽象耦合,保證了訂閱系統的靈活性和可擴展性。在需要UI層與業務邏輯解耦的關聯行爲場景或事件多級觸發場景非常實用。
(2)跨進程或者跨App的消息交換場景。
需要注意的幾個問題
(1)因爲Java中消息的通知默認是順序執行,在觀察者過多或者某個觀察者出現卡頓的情況下,會影響整體的執行效率。