????由于工作原因畔况,簡書已經有一年左右沒有維護更新了,在這一年當中我也受益匪淺(有點夸張慧库,但也確實收獲了不少)跷跪,這里我也將自己的收獲給大家稍作分享,希望能夠幫助到大家齐板。
????首先吵瞻,本文內容主要面向中高端的安卓開發(fā)者,如果你是壓根兒沒參與過項目的小白甘磨,或者是最基本的幾個框架也沒用過的听皿,那么請別浪費你寶貴的時間,等有一定的經驗后再回過頭來看本文宽档,因為現(xiàn)在的你看的肯定暈頭轉向還學不到任何東西。
????本文主要用到了一種比較普遍的代理思想庵朝,由于不能放超鏈接吗冤,所以關于設計模式這些,本文一概不講九府。
????代理模式就好比我們生活中的房地產行業(yè)椎瘟,客戶買房一般都會選擇去尋找房地產公司,而實際上在落實賣房這項工作的是房產公司的業(yè)務員侄旬,業(yè)務員需要從有房可賣的人肺蔚,那么,我們客戶這邊也就不用東跑西跑找房子儡羔,節(jié)省大量的精力和時間宣羊,在這個過程中,房產公司以及業(yè)務人員就起到了中介的作用汰蜘,也就是我們的代理仇冯。
????以上場景在我們應用程序中,APP就相當于是客戶族操,然后我這個客戶APP(客戶)要進行網絡請求(買房)苛坚,就需要用到一個抽象層(房產公司),然后由這個抽象層去尋找具體的網絡請求的邏輯代碼色难。這樣一來泼舱,我們的activity層就不用頻繁的去改動邏輯代碼,就能夠很方便的去切換網絡框架枷莉。如果我們一開始就使用了這樣的架構娇昙,那么以后維護升級將會事半功倍。
下面是一段簡單的請求代碼:以retrofit請求框架為例
layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
?
<Button
android:id="@+id/btnRequest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="請求"/>
?
</LinearLayout>
/**
*
* 買房的客戶
* @author logcat
*/
public class MainActivity extends FragmentActivity implements ICallback {
?
private Button btnRequest;
private HttpProcessor httpProcessor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnRequest = findViewById(R.id.btnRequest);
//尋找一家房地產公司并且委托他們購房任務
httpProcessor = new HttpProcessor(this , this);
btnRequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//房產公司派人找房
httpProcessor.request();
}
});
}
?
/**
* 買到房后走這個方法
* @param o 買到的房子
*/
@Override
public void onSuccess(Object o) {
//裝修一下房子
TestModel model = (TestModel) o;
}
?
@Override
public void onFail(Exception e) {
//買不到房了
}
}
?
/**
*
* 代理類(房產公司)
* @author logcat
*/
public class HttpProcessor {
private FragmentActivity activity;
private ICallback callback;
?
public HttpProcessor(FragmentActivity activity, ICallback callback) {
this.activity = activity;
this.callback = callback;
}
?
?
/**
* 這里找到一個賣家
*/
public void request(){
RetrofitManager.getDefault().getWxArticle()
.compose(RxHelper.<BaseModel<List<TestModel>>>observableOnMainThread())
.subscribe(new RxSubscriber<List<TestModel>>(activity) {
@Override
public void onSuccess(List<TestModel> testModels) {
if(callback != null){
callback.onSuccess(testModels);
}
}
?
@Override
public void onFail(Exception e) {
if(callback != null){
callback.onFail(e);
}
}
});
}
}
/**
* 請求回調(業(yè)務員)
* @author logcat
*/
public interface ICallback<T> {
/**
* 請求成功把數(shù)據(jù)回傳給UI層(業(yè)務員交房)
* @param t 響應回來的數(shù)據(jù)包
*/
void onSuccess(T t);
?
/**
* 請求失敗
* @param e
*/
void onFail(Exception e);
}
????RetrofitManager是一個請求封裝類笤妙,網上有許多相關的文章涯贞,相關內容請自行搜索枪狂,也可以進到我的github中clone相關的代碼,鏈接已附在文章末尾宋渔。
????以上代碼中州疾,網絡請求的實現(xiàn)完全與activity隔離,一定程度上進行了解耦皇拣,如此一來严蓖,假設在未來的某一天需要更換請求框架了,我們可以直接找到代理類氧急,對它進行代碼修改即可颗胡,無需再在activity中東改西改。
????以上為本文的全部內容吩坝,如有錯誤毒姨,歡迎大神們指點和補充。
????代碼已上傳至github钉寝,歡迎star和fork
????github: https://github.com/wzlsz/ProxyDemo