Шаблон Singleton: обеспечение единственного экземпляра
Last updated: 10 мая 2025 г.Singleton
– класс, который гарантировано имеет только один экземпляр.
Используется, как какой-то глобальный ресурс доступ к которому есть в любой точке приложения.
1//Создадим класс синглтона. В нем сразу же создается
2//и объект этого класса и никогда больше объект этого
3//класса не создается и не может быть создан в принципе.
4//В этом вся суть синглтона.
5class Singleton {
6 String str = "Singleton String!!!";
7
8 //Тем что конструктор private достигается
9 //невозможность создания экземпляра этого класса
10 //где-либо вне определения класса Singleton.
11 //Как мы помним private элементами класса
12 //можно пользоваться исключительно в пределах
13 //определения класса поэтому конструктором вне
14 //класса воспользоваться нельзя, а значит
15 //и создать объект этого класса так как при
16 //используетесь конструктор.
17 private Singleton() { }
18
19 //В пределах определения класса как уже было
20 //сказано private элементы доступны.
21 //Поэтому можем создать экземпляр здесь.
22 private static Singleton singleton = new Singleton();
23
24 //Чтобы получить этот единственный экземпляр
25 //у синглтона должен быть публичный метод,
26 //который возвращает его.
27 public static Singleton getInstance() {
28 return singleton;
29 }
30}
31
32public class SingletonExample {
33 public static void main(String[] args) {
34 //Во время работы приложения в любой его точке
35 //может быть извлечен и использован единственный
36 //экземпляр синглтона созданный внутри класса
37 //синглтона.
38
39 //Создадим две ссылки с именами singleton
40 //и singleton1. Обе они ссылаются на один и тот
41 //же единственный возможный объект синглтона.
42 Singleton singleton = Singleton.getInstance();
43 Singleton singleton1 = Singleton.getInstance();
44 //Чтобы доказать что singleton и singleton1
45 //ссылаются на один и тот же объект
46 //давайте изменим str в объекте синглтона через
47 //ссылку singleton.
48 singleton.str = "New singleton string!!!!!!!";
49 //и выведем эту измененную строку в объекте
50 //через ссылку singleton1.
51 System.out.println(singleton1.str);
52 }
53}
Скомпилируем java файл и запустим программу.

Как видим, строка в единственном объекте синглтона успешно была изменена через одну ссылку, а через другую была выведена на консоль. То есть работать можем с единственным объектом синглтона через разные ссылки в приложении.
Singleton vs Статический класс
Часто у многих возникает вопрос – “Зачем нужен синглтон если есть статический класс, который тоже можно использовать как какой-то глобальный ресурс?”
Дело в том, что сиенглтон является экземпляром, когда статический класс нет, поэтому синглтоном можно пользоваться, как нормальным объектом, например, передать как объект куда-то.
Также синглтон в отличие от стат. класса может реализовать или наследовать что-то.
Следующие уроки
Шаблон DAO: работа с БД через объект
13
мин.
Шаблон Front Controller: централизованная обработка запросов
14
мин.
Шаблон Template: поведение по умолчанию
14
мин.