Шаблон Singleton в Java: обеспечение единственного экземпляра

Singleton – класс, который гарантировано имеет только один экземпляр.

Используется, как некий глобальный ресурс доступ к которому есть в любой точке приложения.

//Создадим класс синглтона. В нем сразу же создается //и объект этого класса и никогда больше объект этого //класса не создается и не может быть создан в принципе. //В этом вся суть синглтона. class Singleton { String str = “Singleton String!!!”; //Тем что конструктор private достигается //невозможность создания экземпляра этого класса //где-либо вне определения класса Singleton. //Как мы помним private элементами класса //можно пользоваться исключительно в пределах //определения класса поэтому конструктором вне //класса воспользоваться нельзя, а значит //и создать объект этого класса нельзя так как при //создании объекта всегда вызываеться конструктор private Singleton() { } //В пределах определения класса как уже было //сказано private элементы доступны. //Поэтому можем создать экземпляр здесь. private static Singleton singleton = new Singleton(); //Чтобы получить этот единственный экземпляр //у синглтона должен быть публичный метод, //который возвращает его. public static Singleton getInstance() { return singleton; } } public class SingletonExample { public static void main(String[] args) { //Во время работы приложения в любой его точке //может быть извлечен и использован единственный //экземпляр синглтона созданный внутри класса //синглтона. //Создадим две ссылки с именами singleton //и singleton1. Обе они ссылаются на один и тот //же единственный возможный объект синглтона. Singleton singleton = Singleton.getInstance(); Singleton singleton1 = Singleton.getInstance(); //Чтобы доказать что singleton и singleton1 //ссылаются на один и тот же объект //давайте изменим str в объекте синглтона через //ссылку singleton. singleton.str = “New singleton string!!!!!!!”; //и выведем эту измененную строку в объекте //через ссылку singleton1. System.out.println(singleton1.str); } }

Скомпилируем java файл и запустим программу.

Как видим, строка в единственном объекте синглтона успешно была изменена через одну ссылку, а через другую была выведена на консоль. То есть работать можем с единственным объектом синглтона через разные ссылки в приложении.


Singleton vs Статический класс

Часто у многих возникает вопрос – “Зачем нужен синглтон если есть статический класс, который тоже можно использовать как какой-то глобальный ресурс?”

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

Также синглтон в отличие от стат. класса может реализовать или наследовать что-то.

Шаблон DAO: работа с БД через объект

DAO паттерн в Java: изоляция доступа к данным. Узнайте, как отделить бизнес-логику от низкоуровневых операций с базой данных через Data Access Object.

Time to read: 13

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

Front Controller в Java: централизованная обработка запросов. Паттерн для маршрутизации HTTP-запросов через единую точку входа в веб-приложениях.

Time to read: 14

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

Узнайте, как паттерн Template задает скелет алгоритма в Java. Абстрактный класс определяет последовательность шагов, позволяя подклассам переопределять этапы.

Time to read: 14