一. 基本使用
https://square.github.io/retrofit/#introduction
//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.7.2'
implementation 'com.squareup.retrofit2:converter-gson:2.7.2'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.7.2'
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://www.weater.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
IWeather story = retrofit.create(IWeather.class);
Call<ResponseBody> call = story.getWeather("202.202.33.33");
call.execute();
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});

App應(yīng)用程序通過Retrofit請求網(wǎng)絡(luò),實(shí)際上是使用Retrofit接口層封裝請求參數(shù),之后由OkHttp完成后續(xù)的請求操作。在服務(wù)端返回?cái)?shù)據(jù)之后,OkHttp將原始的結(jié)果交給Retrofit,Retrofit根據(jù)用戶的需求對結(jié)果進(jìn)行解析。
二. Call對象
問題:
Retrofit的Call對象是OKHttp的RealCall對象嗎?跟著代碼來看看。
-
通過動(dòng)態(tài)代理類執(zhí)行請求。執(zhí)行invoke方法返回結(jié)果,
-
在HttpServiceMethod類中實(shí)現(xiàn)了invoke方法,HttpServiceMethod類的作用是將接口方法的調(diào)用調(diào)整為HTTP調(diào)用??梢钥吹?在代碼中創(chuàng)建了OKHttpCall,最最后調(diào)用了CallAdapter類實(shí)現(xiàn)的adapt方法,這個(gè)方法的作用是返回一個(gè)委托給Call對象的實(shí)例。
-
在DefaultCallAdapterFactory類中,adapt方法的實(shí)現(xiàn)。
-
ExecutorCallbackCall類實(shí)現(xiàn)了Call接口,delegate對象是傳過來的OkHttp中RealCall對象。我們知道,在OkHttp中調(diào)用異步返回?cái)?shù)據(jù)后還是在子線程中,這里retrofit通過callbackExecutor將結(jié)果發(fā)送到了主線程中,在Android平臺中用了Handler。
通過代碼分析,Retrofit在默認(rèn)情況下Call對象是DefaultCallAdapterFactory.ExecutorCallbackCall。
二. 動(dòng)態(tài)代理
代理類在程序運(yùn)行時(shí)創(chuàng)建的代理方式。
三. 設(shè)計(jì)模式
建造者模式
Retrofit對象通過Builder內(nèi)部類來構(gòu)建。
觀察者模式

call對象是被觀察者,Callback為觀察者。
外觀模式
定義:提供了一個(gè)統(tǒng)一接口,用來訪問子系統(tǒng)中的一群接口。外觀定義了一個(gè)高層接口,讓子系統(tǒng)更容易使用。
Retrofit類就應(yīng)用了外觀模式。
工廠模式

CallAdapter也應(yīng)用了工廠模式。
策略模式
CallAdapter類中的adapt方法,產(chǎn)生具體的實(shí)現(xiàn)。

工廠模式強(qiáng)調(diào)的是生產(chǎn)不同的對象,策略模式強(qiáng)調(diào)的是不同對象策略方法的實(shí)現(xiàn)。
適配器模式
CallAdapter中的get方法,實(shí)現(xiàn)了切換線程的功能。
addCallAdapterFactory



