Во многих языках программирования существует механизм глобальных переменных, помимо области размещения в памяти, они обладают свойством всеобщей доступности – в Java таких переменных нет. Зачем это может понадобиться нам, крутым проектировщикам, ведь глобальные переменные – зло? – А я хочу параметры настройки один раз читать из файла и потом их отовсюду использовать.
Следующая ситуация – иногда хочется иметь гарантию того, что будет создан только один экземпляр класса. Например, я кеширую данные или управляю соединением с БД.
Как решить эти проблемы – на помощь приходит шаблонное решение, который мы и обсудим.
Singleton – класс не имеющий доступного конструктора и создающийся путем вызова статического метода.
Реализация приписываемая Майерсу:
class God {
private static God ourInstance;
private God(){}
public static God getInstance(){
if(ourInstance == null){
ourInstance = new God();
}
return ourInstance;
}
}
Для сокращения количества строк (на 3 штуки – 30%!) и просветления можно использовать строку
return ourInstance == null ? ourInstance = new God() : ourInstance;
"Создавать" объект теперь надо так:
God foo = God.getInstance();
Стоит отметить что злоупотреблять таким решением не стоит, но учить надо.
Совсем забыл - существует альтернативное, простое, но менее гибкое решение. Жду предложения)