android中觀察者模式解析

項目連接:https://github.com/dipankarghosh28/Learning-Android-ObserverPatternjava

一.爲何使用觀察者模式git

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

 

二.觀察者模式的結構
app

 

三.觀察者模式中的角色單元測試

抽象主題(Subject):它把全部觀察者對象的引用保存到一個彙集裏,每一個主題均可以有任何數量的觀察者。抽象主題提供一個接口,能夠增長和刪除觀察者對象。測試

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

抽象觀察者(Observer):爲全部的具體觀察者定義一個接口,在獲得主題通知時更新本身。server

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


四.觀察者模式示例blog

引用項目的連接: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.能進行簡單的廣播通訊,自動通知全部訂閱的觀察者;

相關文章
相關標籤/搜索