美文网首页
仿Retrofit代理模式实现多业务解耦

仿Retrofit代理模式实现多业务解耦

作者: vesselzhang | 来源:发表于2017-10-16 15:01 被阅读0次

Retrofit最近是非常的火,相信大家都已经在非常麻溜的使用了,还没接触过的同学建议先移步retrofit官网
首先我们来看一下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对象,在大型项目中会有多个模块的存在,而每个模块都会有网络请求,这就会导致出现多个上述代码,不符合编程之美。

    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);
    }

上述代码即可根据传入的Service代码动态生成对应的网络请求管理类。这样我们就可以根据业务逻辑创建多个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

相关文章

  • 仿Retrofit代理模式实现多业务解耦

    Retrofit最近是非常的火,相信大家都已经在非常麻溜的使用了,还没接触过的同学建议先移步retrofit官网。...

  • 结构型 代理模式(文末有项目连接)

    1:什么是代理模式 2:没用代理模式时的实例 3:使用代理模式将其解耦(静态代理) 3:使用代理模式将其解耦(动态...

  • Java 代理模式

    代理模式 代理模式 实现逻辑和实现的解耦 代理模式 为了提供额外的的操作,插入用来代替实际对象的对象。这些操作通常...

  • 设计模式之代理模式

    代理模式 静态代理 动态代理 由上图代码可看到,proxy逻辑被抽象到ProxyHandler中,与业务完全解耦,...

  • 《设计模式之美》(三:结构型模式)

    结构型模式:解耦不同功能 代理模式实现方式:实现同一个接口(加上组合),或者继承动态代理:在代理类比较多的情况下,...

  • iOS解耦方案

    解耦方案是针对AppDelegate,通过消息的转发、GCDMulticastDelegate代理的一对多模式来实...

  • Retrofit 2.4.0 工作流程源码解析

    本文参考 Retrofit分析-漂亮的解耦套路图片来源 Retrofit分析-漂亮的解耦套路源码版本:Retrof...

  • Guava-EventBus使用详解

    在使用ApplicationEvent和Listener快速实现业务解耦中提到了用Spring提供的观察者设计模式...

  • 观察者模式结合Android源码

    1.观察者模式最重要的作用? 解耦,将观察者和被观察者解耦。eg:ui层与具体的业务逻辑解耦 2.观察者模式的定义...

  • 【MQ】RabbitMQ 基础介绍[转]

    消息代理(Message Broker): 一种消息验证、传输、路由的架构模式,实现应用程序之间消息传递的解耦 R...

网友评论

      本文标题:仿Retrofit代理模式实现多业务解耦

      本文链接:https://www.haomeiwen.com/subject/zxgkuxtx.html