Показаны сообщения с ярлыком одиночка. Показать все сообщения
Показаны сообщения с ярлыком одиночка. Показать все сообщения

пятница, 12 февраля 2010 г.

Одиночка или синглетон

Как я и обещал, мы будем публиковать повести о разных шаблонных решениях.
Во многих языках программирования существует механизм глобальных переменных, помимо области размещения в памяти, они обладают свойством всеобщей доступности – в 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();

Стоит отметить что злоупотреблять таким решением не стоит, но учить надо.

Совсем забыл - существует альтернативное, простое, но менее гибкое решение. Жду предложения)