Паттерн Singleton (Одиночка)

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

Ярким примером может служить класс взаимодействия с БД. В нем хранится ссылка на текущее соединение, и все остальные классы работают с БД через него. Делать такой класс статичным нецелесообразно, поскольку в некоторых случаях вам необходимо соединиться с несколькими серверами БД. Передавать же ссылку на объект, работающий с БД, в каждый класс, которому нужен доступ к базе - некрасивое и вредное решение.
Вместо этого, в классе, работающим с БД, можно ввести метод getInstance(), который бы возвращал ссылку на созданный объект. Если объект еще не создан, то метод getInstance() может сначала создать объект, а потом вернуть ссылку на него. Если необходимо держать два и более соединений с базой, можно хранить ссылки на объекты в массиве, а методу getInstance() передавать идентификатор необходимого объекта.

public class Singleton {
private static final Singleton instance;

private Singleton () {
}

public
synchronized static final Singleton getInstance() {
if(instance==null)
ourInstance = new Singleton();
return instance;
}
}

 Конструктор класса необходимо объявить с модификатором видимости private. Это предотвратит создание экземпляров класса как с помощью класса Singleton, так и с помощью его наследников. В связи с этим к объявлению класса смело можно дописать модификатор final.
Метод getInstance() создаст ровно один экземпляр класса Singleton. Этот метод объявлен как synchronized. Сделано это потому как в многопоточных программах при одновременном вызове метода getInstance() из нескольких потоков можно создать несколько экземпляров класса Singleton. А должен остаться только один!
От модификатора synchronized можно избавиться. Для этого instance нужно
проинициализировать:

private static Singleton instance = new Singleton();

а в методе getInstance() можна  убрать конструкцию “if”.

Таким образом, Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.

: : мобильные рекламные стенды