結合上一篇
Android網絡框架必備的功能
在描述了大體功能,現在關心的代碼就是它裏面的設計模式
OkHttpUtil{
/**
* 同步請求
* @param info 請求信息體
* @return HttpInfo
*/
@Override
public HttpInfo doSync(HttpInfo info) {
return OkHttpHelper.Builder()
.httpInfo(info)
.requestType(info.getRequestType())
.helperInfo(packageHelperInfo(info))
.build()
.doRequestSync();
}
}
/**
* OkHttpUtil業務類:負責處理所有業務
* @author zhousf
*/
public class OkHttpHelper {
public static final class Builder {
...
public Builder() {
}
public OkHttpHelper build(){
if(!this.uploadFileInfoList.isEmpty()){
this.businessType = BusinessType.UploadFile;//文件上傳
UploadFileInfo uploadFileInfo = uploadFileInfoList.get(0);
if(!TextUtils.isEmpty(uploadFileInfo.getUrl())){
this.httpInfo.setUrl(uploadFileInfo.getUrl());
}
} else if(downloadFileInfo != null){
this.businessType = BusinessType.DownloadFile;//文件下載
if(!TextUtils.isEmpty(downloadFileInfo.getUrl())){
this.httpInfo.setUrl(downloadFileInfo.getUrl());
}
} else{
this.businessType = BusinessType.HttpOrHttps;//http/https請求
}
return new OkHttpHelper(this);
}
public Builder httpInfo(HttpInfo httpInfo){
this.httpInfo = httpInfo;
return this;
}
public Builder helperInfo(HelperInfo helperInfo){
this.helperInfo = helperInfo;
return this;
}
public Builder downloadFileInfo(DownloadFileInfo downloadFileInfo){
this.downloadFileInfo = downloadFileInfo;
return this;
}
public Builder uploadFileInfo(UploadFileInfo uploadFileInfo){
uploadFileInfoList.add(uploadFileInfo);
return this;
}
public Builder uploadFileInfoList(List<UploadFileInfo> uploadFiles){
uploadFileInfoList.addAll(uploadFiles);
return this;
}
public Builder clientBuilder(OkHttpClient.Builder clientBuilder){
this.clientBuilder = clientBuilder;
return this;
}
public Builder requestType(@RequestType int requestType){
this.requestType = requestType;
return this;
}
public Builder callback(BaseCallback callback){
this.callback = callback;
return this;
}
public Builder progressCallback(ProgressCallback progressCallback){
this.progressCallback = progressCallback;
return this;
}
}
}
在OkHttpHelper中 的靜態內部類Builder中給成員變量賦值後,然後返回Builder類本身的方式,然後在調用時只需要通過追加的方式,從而達到連續給不同的成員變量賦值的效果,這種設計模式,可以在以後嘗試下。
在這裏設定了httpInfo,requestType,HelperInfo
之後的build方法則是根據設定的內容,來判斷當前的業務類型,是上傳文件,是下載文件,還是http或者https請求,同時把父類對象OkHttpHelper實例化出來然後最後一步就通過`
public HttpInfo doRequestSync(){
return httpHelper.doRequestSync(this);
}
public void doRequestAsync(){
httpHelper.doRequestAsync(this);
}
public void downloadFile(){
downUpLoadHelper.downloadFile(this);
}
public void uploadFile(){
downUpLoadHelper.uploadFile(this);
}
於是,流程從OkHttpHelper移動到了 HttpHelper或者DownUpLoadHelper中
介紹了這麼多,可能下一篇文章才能看到最終的底層實現