Должен ли я использовать модификацию с одним синглом?

Я новичок в модернизации и хочу знать, что лучше всего.

Вот какой-то абстрактный код, который я нашел в Интернете:

public class RestClient

{
    private static final String BASE_URL = "your base url";
    private ApiService apiService;

    public RestClient()
    {
        Gson gson = new GsonBuilder()
                .registerTypeAdapterFactory(new ItemTypeAdapterFactory()) // This is the important line ;)
                .setDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'")
                .create();

        RestAdapter restAdapter = new RestAdapter.Builder()
                .setLogLevel(RestAdapter.LogLevel.FULL)
                .setEndpoint(BASE_URL)
                .setConverter(new GsonConverter(gson))
                .setRequestInterceptor(new SessionRequestInterceptor())
                .build();

        apiService = restAdapter.create(ApiService.class);
    }

    public ApiService getApiService()
    {
        return apiService;
    }
}

и позволяет сказать, что я хочу сделать запрос/вызов api с помощью этой функции

RestClient restClient = new RestClient();
restClient.getApiService().getPosts();

Мой вопрос в том, должен ли я создать новый объект restClient, или это должен быть синглтон, или ApiService должен быть одиночным.

Какая лучшая практика? Пожалуйста, имейте в виду, что я не хочу использовать инъекцию зависимостей, я просто хочу понять, как лучше всего использовать модификацию.

Как кто-то из вас сделает этот вызов?

Ответ 1

Код, который у вас есть, в порядке. Вы можете оставить restClient как одноэлементный, а затем просто вызвать restClient.getApiService().getPosts(); всякий раз, когда вы хотите снова получать сообщения (не создавайте новый restClient каждый раз).

Ответ 2

Вы должны сделать RestClient как singleton любым способом, который вам нравится (enum, standard getInstance() или даже double check).

Сохранение их как singleton приведет к увеличению производительности, потому что вы не будете создавать каждый раз такие дорогостоящие объекты, как Gson, RestAdapter и ApiService.

Edit: Максимальные запросы, которые могут быть обработаны одновременно с помощью Retrofit, зависят от конфигурации HttpClient.

При использовании с OkHttp значение по умолчанию равно 64 (оно определено в Dispatcher).

Однако его можно манипулировать с помощью setMaxRequests(), помните, что не создавайте слишком много потоков (это может привести к OutOfMemory).