Android網絡框架二(設計模式)

結合上一篇
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中
介紹了這麼多,可能下一篇文章才能看到最終的底層實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章