Retrofit設計模式源碼解析

由於Retrofit作到了很強的解耦,所以就必定須要用到不少設計模式。因此,我以爲,經過閱讀Retrofit源碼來學習設計模式是再好不過的設計模式學習方法了。設計模式

大體看了一圈Retrofit源碼,受益不淺。 從網上盜用兩張圖,以下: 對於網絡請求庫的封裝,主要包括3部分:網絡

一、數據的組裝框架

二、發送網絡請求學習

三、處理返回數據,並回調結果優化

對於步驟一,數據的組裝:ui

Retrofit採用了外觀模式(門面模式)、動態代理模式和建造者模式。Retrofit利用了接口的的方式,將請求數據規範成一個接口,而後經過對用戶定義的接口進行解析,而後將解析的數據組裝成請求的數據。設計

Retrofit類做爲外部使用的惟一入口,這是一種外面模式,也叫門面模式。用戶使用時,只須要使用Retrofit的create方法就能夠。3d

那麼用戶定義的接口是如何轉換成請求數據的呢?Retrofit很是精彩地使用了動態代理,去解析用戶定義接口方法中的註解和返回值。代理

對解析的數據進行組裝使用的是建造者模式。該建造者模式的實現類是ServiceMethod的Builder類。blog

對於步驟二,發送網絡請求:

Retrofit使用了適配器模式、工廠方法模式、策略模式。

Retrofit默認使用了OkHttpCall進行網絡請求,這塊是寫死的代碼,之後可能會優化,也多是square公司如今在綁定推廣retrofit和okhttp吧,可是從Retrofit的設計上看,將網絡請求庫改爲可靈活配置,也是比較容易的。

由於Retrofit在網絡庫的配置上採用了適配器模式。其中,CallAdapter就是用於調用OkHttpCall進行網絡請求的。

Retrofit定義了CallAdapter接口和CallAdapter.Factory接口,這是一種工廠方法模式,只有在框架的靈活配置上纔會使用工廠方法模式。

對於Retrofit的策略模式,在Java8CallAdapter中使用了,根據不一樣的狀況返回BodyCallAdapter和ResponseCallAdapter。

對於步驟三,處理返回數據,並回調結果

是在OkHttpCall中進行的。採用了工廠方法模式。

Retrofit定義了Converter和Converter.Factory接口,進行數據的處理。這是工廠方法模式。

用Converter對返回結果進行處理,是在ServiceMethod類中的方法中進行的,而這個方法是在OkHttpCall中調用的。

 

綜上,經過閱讀Retrofit源碼,讓我對設計模式的理解更加深刻。理解了一些在頭腦中以前很模糊的設計模式概念。

相關文章
相關標籤/搜索