【问题标题】:Code implementation Singleton Design Pattern: Bill Pugh on a Retrofit object代码实现单例设计模式:Bill Pugh 在 Retrofit 对象上
【发布时间】:2016-12-29 05:47:18
【问题描述】:

我一直在尝试使用私有静态类来实现 Bill Pugh 单例设计模式,以返回单例改造实例。到目前为止,我已经能够提出以下代码。有人可以帮我检查这段代码并确认这是否是 Bill Pugh 先生自己建议的单例设计模式的正确实现,或者建议我一种正确的实现方式。

public class SingletonRetrofit {

    private SingletonRetrofit(){}

    private static class SingletonRetrofitHelper {

        private static OkHttpClient okHttpClient;
        private static Retrofit retrofit;

        private static Retrofit makeRetrofit() {

            HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
            interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            okHttpClient = new OkHttpClient.Builder()
            .addInterceptor(interceptor)
            .readTimeout(20, TimeUnit.SECONDS)
            .connectTimeout(15, TimeUnit.SECONDS)
            .build();

            retrofit = new Retrofit.Builder()
            .baseUrl("http://ci.draftserver.com/hornsbyapp/webservice/")
            .client(okHttpClient)
            .addConverterFactory(ScalarsConverterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .build();

            return retrofit;

        }
    }

    public static Retrofit getInstance() {
        return SingletonRetrofitHelper.makeRetrofit();
    }
}

【问题讨论】:

  • 如果这是工作代码,那么 Code Review SE 是 down the hall
  • @JohnBollinger 第一个门在你的右边。 ;)
  • @JohnBollinger 是的,代码运行良好,谢谢 :)

标签: android android-studio singleton retrofit2


【解决方案1】:

使用这个:

public class Apiclient {

    private static final String BASE_URL ="URL";
    private static Retrofit retrofit = null;

    public static Retrofit getClient() {

        if (retrofit == null) {

          OkHttpClient.Builder httpClient2 = new OkHttpClient.Builder();
          httpClient2.addNetworkInterceptor(new Interceptor() {

            @Override
            public Response intercept(Chain chain) throws IOException {
                Request.Builder builder = chain.request().newBuilder();
                builder.addHeader("site_id","1");
                return chain.proceed(builder.build());
            }
          });
          OkHttpClient client = httpClient2.build();

            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(client)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
         }
         return retrofit;
    }
}

【讨论】:

  • 我不相信这是 Bill Pugh 实施。所以
  • 这提供了改造的单例对象
  • 我知道这提供了单例对象,但这是单例的延迟实现。 journaldev.com/1377/…读一读
猜你喜欢
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 2010-12-03
  • 2014-06-28
  • 2021-01-19
相关资源
最近更新 更多