Топ-100Шаблон Singleton: обеспечение единственного экземпляра - CodOrbits
LogoCodOrbits

Раздел: Шаблоны проектирования

Раздел о популярных паттернах проектирования в Java: Singleton, Factory, MVC и других архитектурных решениях.

Все разделы
Иконка Шаблоны проектирования

Шаблон 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
мин.

Similar Articles Icon
Divider

Шаблон Front Controller: централизованная обработка запросов

14
мин.

Similar Articles Icon
Divider

Шаблон Template: поведение по умолчанию

14
мин.

Similar Articles Icon