Должен ли я использовать модификацию с одним синглом?
Я новичок в модернизации и хочу знать, что лучше всего.
Вот какой-то абстрактный код, который я нашел в Интернете:
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).