Целесообразность использования IODH в Kotlin

Рейтинг: 0Ответов: 0Опубликовано: 18.07.2025

Шаблон IODH использует механизм загрузки классов Java для обеспечения отложенной инициализации синглтонов в потокобезопасном режиме без явной синхронизации.

В Java:

public class SingletonIODH {
    private SingletonIODH() {}

    private static class Holder {
        private static final SingletonIODH INSTANCE = a new SingletonIODH();
    }

    public static SingletonIODH getInstance() {
        return Holder.INSTANCE;
    }
}

В Kotlin:

class SingletonIODH private constructor() {
    companion object {
        val instance: SingletonIODH by lazy { Holder.INSTANCE }
    }

    private object Holder {
        val INSTANCE = SingletonIODH()
    }
}

Но в Kotlin делегат by lazy сам по себе делает все то для чего предназначен этот шаблон - однократная отложенная инициализация синглтона в потокобезопасном режиме.

class Singleton private constructor() {
    companion object {
        val instance by lazy { Singleton() }
    }
}

Является ли lazy полноценной заменой IODH в Kotlin или существуют ситуации где IODH будет предпочтителен?

Ответы

Ответов пока нет.