什麼是觀察者模式設計模式
所謂觀察者模式,就是定義對象間一種一對多的依賴關係,使得每當一個對象改變狀態,則全部依賴於他的對象都會獲得通知並被自動更新的設計模式。框架
觀察者模式的實現方式異步
觀察者調用Observer接口,被觀察者調用Observable接口。當被觀察者有更新時,遍歷全部觀察者,這樣就實現了一對多的通知功能。ide
《西遊記》第一回孫悟空出世,立刻便被千里眼和順風耳報告給玉皇大帝,這就是一個典型的觀察者模式。this
首先定義觀察者spa
public class Spy implements Observer { |
而後被觀察者是花果山server
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中消息的通知默認是順序執行,在觀察者過多或者某個觀察者出現卡頓的狀況下,會影響總體的執行效率。