android中觀察者模式解析


項目鏈接:https://github.com/dipankarghosh28/Learning-Android-ObserverPattern

一.為什么使用觀察者模式

觀察者模式在實際項目中使用的也是非常頻繁的,它最常用的地方是GUI系統、訂閱——發布系統等。因為這個模式的一個重要作用就是解耦,使得它們之間的依賴性更小,甚至做到毫無依賴。以GUI系統來說,應用的UI具有易變性,尤其是前期隨着業務的改變或者產品的需求修改,應用界面也經常性變化,但是業務邏輯基本變化不大,此時,GUI系統需要一套機制來應對這種情況,使得UI層與具體的業務邏輯解耦,觀察者模式此時就派上用場了。觀察者模式又被稱作發布/訂閱模式,觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。

 

二.觀察者模式的結構

 

三.觀察者模式中的角色

抽象主題(Subject):它把所有觀察者對象的引用保存到一個聚集里,每個主題都可以有任何數量的觀察者。抽象主題提供一個接口,可以增加和刪除觀察者對象。

具體主題(ConcreteSubject):將有關狀態存入具體觀察者對象;在具體主題內部狀態改變時,給所有登記過的觀察者發出通知。

抽象觀察者(Observer):為所有的具體觀察者定義一個接口,在得到主題通知時更新自己。

具體觀察者(ConcreteObserver):實現抽象觀察者角色所要求的更新接口,以便使本身的狀態與主題狀態協調。


四.觀察者模式示例

引用項目的鏈接:https://github.com/dipankarghosh28/Learning-Android-ObserverPattern/blob/master/ObserverTest/app/src/main/java/com/example/dipankarghosh/observertest/Test.java

1.首先定義一個繼承Observable的被觀察者Test.java類,通過setChanged()方法通知數據改變,然后通過notifyObservers()方法發送信號通知觀察者。

引用項目鏈接:https://github.com/dipankarghosh28/Learning-Android-ObserverPattern/blob/master/ObserverTest/app/src/main/java/com/example/dipankarghosh/observertest/MainActivity.java

2.當被觀察者因為數據發生了改變,並通知了相關的觀察者后,觀察者將會調用update()這個方法進行數據更新,第一個測試的activity

引用項目的鏈接:https://github.com/dipankarghosh28/Learning-Android-ObserverPattern/blob/master/ObserverTest/app/src/main/java/com/example/dipankarghosh/observertest/SecondActivity.java

3.當被觀察者因為數據發生了改變,並通知了相關的觀察者后,觀察者將會調用update()這個方法進行數據更新,第二個測試的activity

 

4.最后創建一個觀察者實例,我們就可以在單元測試里頭進行測試了

 

 

五.觀察者模式的優點

1.觀察者模式解除了主題和具體觀察者的耦合,讓耦合的雙方都依賴於抽象,而不是依賴具體。

2.能進行簡單的廣播通信,自動通知所有訂閱的觀察者;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM