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

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

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

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

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

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

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

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

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

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

Автоинкремент версии билда в проекте на kotlin

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

Куча готовых решений в сети, но почему то ничего не работает. Пришлось исследовать этот вопрос. Оказалось, что gradle.kts это тоже kotlin скрипт, который выполняется каждый раз при сборке проекта. И задача состоит в том, чтобы увеличивать версию ...

Читать

Анимированный градиент в ActionBar

Октябрь 23, 2022 г.

Расскажу как создать фон для actionbar с анимацией градиента цвета. Нам понадобится Android Studio и Kotlin. Для начала добавим drawable ресурс в наш проект. Откроем в проекте вкладку res/drawable и выберем из меню File -> New -> Drawable ...

Читать

Cannot find implementation for Database. Database_Impl does not exist (Room)

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

Данная ошибка при работе c Room обычно связана с неполным или неверным описанием в gradle файлах, связанных с обработчиком аннотаций. Т.е. суть ошибки в том, что он просто не может прочитать аннотации, которые вы сделали к классу базы данных, и по умолчанию ...

Читать

Вызов одного конструктора в другом в Kotlin

Январь 21, 2025 г.

Если вы переходите с java на kotlin, то у вас часто возникают вопросы вроде - как сделать на kotlin то, что вы делали на java вот так и так. В java вызов перегруженного конструктора в другом конструкторе класса выглядит следующим образом. Представим, ...

Читать
 

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

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



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