Что такое singleton класс в Java?
Содержание
В объектно-ориентированном программировании шаблон Singleton ограничивает создание экземпляра класса и гарантирует, что в JVM (виртуальная машина Java) существует только один экземпляр класса. Другими словами, класс должен гарантировать, что только один экземпляр должен быть создан, а один объект может использоваться всеми другими классами.
Использование шаблона Singleton
Когда вам нужно убедиться, что существует один экземпляр объекта, доступного для нескольких других классов, вы можете использовать шаблон Singleton.
Когда вам нужно убедиться, что существует один экземпляр объекта, доступного для нескольких других классов, вы можете использовать шаблон Singleton....
Чтобы создать шаблон Singleton, вам необходимо следующее:
Чтобы создать шаблон Singleton, вам необходимо следующее:...
class SingletonClass { private static SingletonClass sInstance = null; public String msg; private SingletonClass() { msg = "Singleton Test"; } public static SingletonClass getInstance() { if (sInstance == null) sInstance = new SingletonClass(); return sInstance; } }
public class TestClass { public static void main(String[] args) { // экземпляр класса Singleton с тремя переменными obj1, obj2, obj3 SingletonClass obj1 = SingletonClass.getInstance(); SingletonClass obj2 = SingletonClass.getInstance(); SingletonClass obj3 = SingletonClass.getInstance(); // изменение переменной экземпляра obj1 obj1.msg = (obj1.msg).toUpperCase(); System.out.println("msg from obj1 is " + obj1.msg); System.out.println("msg from obj2 is " + obj2.msg); System.out.println("msg from obj3 is " + obj3.msg); System.out.println("\n"); // изменение переменной экземпляра obj3 obj3.msg = (obj3.msg).toLowerCase(); System.out.println("msg from obj1 is " + obj1.msg); System.out.println("msg from obj2 is " + obj2.msg); System.out.println("msg from obj3 is " + obj3.msg); } }
Выход
msg from obj1 is SINGLETON TEST msg from obj2 is SINGLETON TEST msg from obj3 is SINGLETON TEST msg from obj1 is singleton test msg from obj2 is singleton test msg from obj3 is singleton test
SingletonClass Пояснение
В SingletonClass, в первый раз, когда мы запрашиваем метод getInstance() в первый раз, он создает объект класса с именем sInstance и возвращает его переменной.
if (sInstance == null) sInstance = new SingletonClass();
Поскольку sInstance является статическим, он изменяется от нуля до некоторого объекта. Второй раз, когда мы пытаемся вызвать метод getInstance(), поскольку sInstance не является нулевым, тогда он возвращается переменной вместо создания нового объекта SingletonClass.
В основном методе мы создаем экземпляр класса singleton с 3 объектами obj1, obj2, obj3, вызывая статический метод getInstance(). Но на самом деле после создания объекта obj1 переменные obj2 и obj3 указываются на объект obj1. Итак, если мы изменим переменные объекта obj1, это отразится при доступе к переменным объектов obj2 и obj3. Также, если мы изменим переменные объекта obj3, это отразится при доступе к переменным объектов obj1 и obj2.
Разница между нормальным классом и классом Singleton
Разница в нормальном и одиночном классе в терминах создания экземпляра. То есть для нормального класса мы используем конструктор для создания экземпляра, тогда как для singleton-класса мы используем метод getInstance().
Разница в нормальном и одиночном классе в терминах создания экземпляра. То есть для нормального класса мы используем конструктор для создания экземпляра, тогда как для singleton-класса мы используем метод getInstance()....
Разница между статическим классом и одиночным шаблоном
- Объекты Singleton хранятся в куче, но статические объекты хранятся в стеке.
- Мы можем клонировать объект singleton, но мы не можем клонировать объект статического класса.
- Одиночные классы следуют концепциям ООП), статические классы этого не делают.
- Вы можете создать один экземпляр объекта и повторное его использование, тогда как вы не можете создать экземпляр статического класса.