Синглтон и даблчек

Рассмотрим использование двух паттернов программирования в kotlin — singleton и doublecheck.

У нас есть пример кода, где экземпляр класса получается как singleton. Для асинхронного вызова функции используется блок синхронизации.

Синглтон нужен в случаях, когда требуется использовать единственный экземпляр класса для всего приложения. Например, это может быть доступ к базе данных. При первом обращении через getInstance мы создадим экземпляр класса, а затем будем всегда возвращать этот экземпляр при любом обращении.

В методе getInstance мы также видим повторяющийся код :

Его обычно называют паттерном doublecheck. Не всегда ясно зачем так делается, т.к. код будет верно работать и без дублирования. Мы можем оставить этот код внутри syncronized блока и приложение будет работать корректно.

В данном случае это делается для оптимизации производительности, чтобы предотвратить вход в synchronized блок. Вызов getInstance всегда, кроме первого раза должен просто вернуть существующий экземпляр класса MyClass.

Синхронизация может потребоваться только, если до создания экземпляра мы вызвали getInstance из 2х и более потоков.

В дальнейшем нам уже не требуется синхронизация, поэтому проверку instance на null предпочтительнее иметь вне блока синхронизации.

Написать комментарий

Мало букафф? Читайте есчо !

View Binding в kotlin

Февраль 15, 2025 г.

Иногда на собесах спрашивают что такое view binding, и звучит это как некая сложная тема, но на самом деле, это просто фича сборщика, которую можно использовать для упрощения доступа к элементам шаблонов. Этот механизм упрощает работу с элементами ...

Читать

Читаем данные из интернет

Январь 23, 2025 г.

Для чтения данных из интернет есть множество библиотек и классов, потому не стоит делать так, как это описано ниже в статье. Я буду использовать базовые библиотеки, и будет много кода (kotlin). Задача - есть BASE_URL, надо прочитать текстовые данные. ...

Читать

 

Комментарии к «Синглтон и даблчек»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: