Освой программирование играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Шаблон не является частью языка 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 г.)