仿Retrofit代理模式實現(xiàn)多業(yè)務解耦

Retrofit最近是非常的火,相信大家都已經在非常麻溜的使用了,還沒接觸過的同學建議先移步retrofit官網(wǎng)
首先我們來看一下Retrofit的國際通用用法:

public class RetrofitSimple {
    private static DataServiceInterface serviceInterface;

    static {
        Retrofit.Builder retrofitBuilder = new Retrofit.Builder().baseUrl("https://api.xxxxx.com/")
                .addConverterFactory(GsonConverterFactory.create());
        serviceInterface = retrofitBuilder.build().create(DataServiceInterface.class);
    }

    public static DataServiceInterface getService() {
        return serviceInterface;
    }
}

這里每個retrofit.create方法只放回DataServiceInterface對象,在大型項目中會有多個模塊的存在,而每個模塊都會有網(wǎng)絡請求,這就會導致出現(xiàn)多個上述代碼,不符合編程之美。

    private static <T> T initService(String baseUrl, Class<T> clazz) {
        OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
        OkHttpClient client = builder.build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(FastJsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .client(client)
                .build();

        return retrofit.create(clazz);
    }

上述代碼即可根據(jù)傳入的Service代碼動態(tài)生成對應的網(wǎng)絡請求管理類。這樣我們就可以根據(jù)業(yè)務邏輯創(chuàng)建多個Service。當然我們可以提供一個公共的service管理類,方便各個模塊調用。
完整代碼如下:

public final class ApiClient {
    public static String baseUrl = "https://api.xxxxx.com/";
    public static AppService appService;
    public static ModuleAService moduleAService;
    public static ModuleBService moduleBService;

    public static ApiConfiguration configuration;

    public static void init(ApiConfiguration configuration){

        ApiClient.configuration = configuration;

        appService = initService(baseUrl, AppService.class);
        moduleAService = initService(baseUrl, ModuleAService.class);
        moduleBService = initService(baseUrl, ModuleBService.class);
    }

    private static <T> T initService(String baseUrl, Class<T> clazz) {
        OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
        OkHttpClient client = builder.build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(FastJsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .client(client)
                .build();

        return retrofit.create(clazz);
    }
}

Over

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容