Освой программирование играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Java. Шаблон Singleton

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

Синглтон (singleton) это класс, у которого экземпляр создаётся только один раз. Хорошим примером такого поведения служит файловая система, система работы с видео и т.д. В Android можно привести примеры с классами OkHttpClient, Retrofit, Gson, SharedPreferences. Для реализации синглтона нужно создать закрытый конструктор и открытый статический член, который и позволяет получить доступ к единственному экземпляру класса. Например, так.


public class Single {

    public static final Single INSTANCE = new Single();

    private Single(){}

    public void someMethod() {
        Log.i("Log", "I am someMethod");
    } 
}

Закрытый конструктор вызывается один раз для инициализации поля INSTANCE. Открытых конструктор у класса нет, поэтому после инициализации класса будет существовать только один экземпляр Single.

Существует другой вариант, когда вместо открытого статического поля создаётся открытый статический метод, а поле становится закрытым.


public class Single {

    private static final Single INSTANCE = new Single();

    private Single(){}

    public void someMethod() {
        Log.i("Log", "I am a someMethod");
    }

    public static Single getInstance(){
        return INSTANCE;
    }
}

Второй способ удобен тем, что вы можете позже отказаться от синглтона, но вам не придётся сильно переписывать код.

Позже был придуман третий вариант с использованием enum.

Дополнительные материалы

Реализация Singleton в JAVA / Хабрахабр (2008 г.)

Правильный Singleton в Java / Хабрахабр (2011 г.)

Реклама