RxCache源碼解析摘要

RxCache使用注解為Retrofit的請求API配置緩存信息,職責清晰。在對緩存的處理時,使用動態(tài)代理對數(shù)據(jù)請求進行介入。

動態(tài)代理

RxCache創(chuàng)建API訪問接口事例采用動態(tài)代理模式。在執(zhí)行網(wǎng)絡請求之前,檢查是否從緩存中讀取;網(wǎng)絡請求之后,進行自定義的緩存操作。

動態(tài)代理機制

代理類在運行時生成,也就是說Java編譯完之后并沒有實際的class文件,而在運行時動態(tài)生成的類字節(jié)碼,并加載到JVM中。
靜態(tài)代理類的實現(xiàn)又很多共性(重復代碼),動態(tài)代理可以避免這些重復代碼,只需關(guān)注操作。
動態(tài)代理利用反射,為動態(tài)生成的代理類增加了InvocationHandler調(diào)用處理器。也就是說InvocationHandler承擔了對委托類的干預操作,如訪問控制、遠程通信、日志、緩存等。參考 & 成富大佬的深度歷險JAVA系列

擴展:類型擦除機制

具體表現(xiàn)就是類型參數(shù)只存在于編譯期,在運行時,Java 的虛擬機 ( JVM )。 并不知道泛型的存在。Java的泛型機制是在編譯級別實現(xiàn)的。編譯器生成的字節(jié)碼在運行期間并不包含泛型的類型信息,編譯器在編譯生成的字節(jié)碼文件中插入了類型轉(zhuǎn)換的代碼。
數(shù)組在運行期間知道每個元素的類型且強制它們的元素為該類型.

擴展:工廠模式

簡單工廠模式:提供一個工廠負責制造多類型的產(chǎn)品,工廠是全能類
工廠模式:多個工廠各自負責單一類型產(chǎn)品的構(gòu)建,工廠為單一職責
抽象工廠模式:如果工廠的產(chǎn)品全部屬于同一個等級結(jié)構(gòu)則屬于工廠模式,如果來自多個等級結(jié)構(gòu)則屬于抽象工廠模式。
構(gòu)造者模式:當多個子部分可以組成不同的產(chǎn)品時,使用構(gòu)造者模式對產(chǎn)品構(gòu)建邏輯進行封裝。

RxJava中的defer及flatmap操作符

在對緩存進行獲取和存儲時,使用RxJava語法進行操作。

  1. defer
    just(),from(),和其他Observable創(chuàng)建的工具在創(chuàng)建Observable時會存儲當前的數(shù)據(jù),而不是在subscribe()的時候.但是使用 create()defer()是可以的。
    Observable.defer(() -> Observable.just(value));
    但是 defer()Observable.create()更簡單,不會調(diào)用onCompleted(),defer() 的缺點是當有新的訂閱者時它每次都會創(chuàng)建Observable,create()則會使用相同的Observable

  2. flatMap doesn't guarantee any order,but concatMap can.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,045評論 25 709
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,697評論 18 399
  • WKWebView: it doesn't start with "UI" so WKWebView is not...
    四毛哥掉落的鱗片閱讀 370評論 0 0
  • 昨天晚上(或者今天早上)做了一個(應該不止一個)很長,很深,很久的夢。 故事的一開始是什么我已經(jīng)忘了,大概是我要回...
    She_rry_閱讀 197評論 0 0

友情鏈接更多精彩內(nèi)容