Вступ до класу Singleton на Java

Клас Singleton обмежує створення об'єкта для класу лише одним у віртуальній машині Java. Це також допомагає забезпечити глобальну точку доступу до об'єкта. Цей шаблон дизайну зазвичай використовується в кешування, абстрактних заводу, веденні журналів, прототипі тощо. Він також використовується в основних ява-класах, таких як java.awt.Desktop, java.lang.Runtime. У java.lang.Runtime Java надає клас Runtime, який позначає поточне середовище виконання, де працює програма. Це допомагає взаємодіяти програми та середовище виконання. Має бути один об’єкт, оскільки JRE унікальний. У java.awt.Desktop клас Desktop дозволяє програмам запускати URI або файл із браузером за замовчуванням користувача, поштового клієнта тощо. Тут також повинен бути лише один екземпляр класу.

Як працює клас Singleton на Java

Клас одиночки можна створити двома способами.

  1. Встановіть конструктор як приватний, щоб обмежити створення об'єкта.
  2. Створіть статичний метод, щоб отримати екземпляр об’єкта, щоб ви могли обробляти створення об'єкта тільки всередині класу.

Тепер давайте подивимось діаграму UML класу (Unified Modeling Language) діаграми класу Singleton.

У діаграмі UML класу перший розділ представляє ім’я класу, другий розділ представляє атрибути, а третій розділ представляє методи. Також + вказує на загальнодоступні атрибути чи методи та - вказує на приватні атрибути чи методи. У нашій діаграмі UML класу Singleton ім'я класу - Singleton, і він має основний метод. Основний метод, метод getInstance та sampleMethod - єдині методи, які є відкритими на наведеній вище діаграмі. Атрибут конструктора та екземпляра встановлений як приватний як частина нашої реалізації. Цей загальнодоступний головний метод запитує екземпляр і getInstance повертає його до основного методу.

Виходячи з Instantiation, єдина відмінність між звичайним класом Java і класом Singleton полягає в тому, що ми будемо використовувати конструктор в класі Java, тоді як в Singleton будемо використовувати метод getInstance ().

Однотонний візерунок дизайну складається з двох форм.

  • Ледача миттєвість: створення екземплярів при необхідності
  • Рання миттєва інстанція : створення екземплярів під час завантаження.

1. Ледача миттєвість

У програмі Lazy Instantiation примірник класу створюється, коли це потрібно. Він створюється методом або блоком синхронізації, щоб уникнути перегонових умов, які можуть виникати в багатопотоковому середовищі.

2. Рання миттєвість

У Early Instantiation створюється екземпляр у момент завантаження. Незважаючи на те, що це найпростіший підхід, він недоліком є ​​те, що створення екземпляра є незалежно від того, доступ до нього чи ні.

Приклад лінивої миттєвості та раннього миттєвості пояснюється в наступному розділі.

Реалізація класу Singleton на Java

Як обговорювалося вище, клас Singleton може бути створений в ранньому моменті або ледачому інстантації.

Ледача миттєвість

Далі наведені кроки щодо впровадження Ініціативної Ініціативи

1. Встановіть Конструктор як приватний.

Наприклад, ми створюємо клас LazyClass. Конструктор буде, як показано нижче.

private LazyClass ()
(
)

2. Створіть приватний статичний екземпляр для створеного класу.

private static LazyClass instance;

3. Створіть статичний синхронізований метод, який створює створений екземпляр класу.

public static synchronized LazyClass getInstance()
(
)

4. Способом getInstance () спочатку перевірте, чи є примірник чи ні. Якщо його не знайдено, створіть його. Ще повернути примірник.

if(instance == null)
(
instance = new LazyClass ();
)
return instance;

Тепер давайте розглянемо це за допомогою зразкового коду.

//Java Program for Lazy Instantiation
public class LazyClass (
private static LazyClass instance;
//set the constructor as private
private LazyClass () ()
//Checks whether an instance is already in the getInstance method
public static synchronized LazyClass getInstance() (
//if instance is not present already, create a new one
if(instance == null) (
instance = new LazyClass ();
)
// if an instance is present, then return it
return instance;
)
//Sample method that is protected from more than one object creation
public void sampleMethod( ) (
System.out.println("sampleMethod for lazy singleton");
)
public static void main(String() args) (
LazyClass temp=LazyClass.getInstance();
temp.sampleMethod();
)
)

Вихід:

Тут замість створення екземпляра під час завантаження він створюється всередині синхронізованого блоку. Для кращого розуміння наведено також зразок методу, який захищений від створення більше ніж одного об'єкта.

Рання миттєвість

Тепер давайте подивимося на етапи раннього миттєвого уявлення. Він схожий на Lazy instantiation, за винятком того, що він не використовує жодного синхронізованого методу чи блоку.

1. Встановіть Конструктор як приватний.

Наприклад, ми створюємо клас EarlyClass. Конструктор буде, як показано нижче.

private EarlyClass () ()
(
)

2. Створіть приватний статичний екземпляр для створеного класу.

private static EarlyClass ins = new EarlyClass();

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

public static EarlyClass getInstance()
(
)

Далі наведено зразок коду для раннього моменту.

//Java Program for Early Instantiation
public class EarlyClass (
//Create an instance of the class at load time
private static EarlyClass ins = new EarlyClass();
//set the constructor as private
private EarlyClass () ()
//A static method to get the instance
public static EarlyClass getInstance() (
return ins ;
)
//A sample method that is protected from more than one object creation
public void sampleMethod() (
System. out .println("sampleMethod for Early singleton");
)
//Main method
public static void main(String() args) (
EarlyClass tmp = getInstance ();
tmp.sampleMethod();
)
)

Вихід:

У вищезгаданій програмі екземпляр створюється в час завантаження і повертається за допомогою методу getInstance (). Крім того, Constructor встановлений як приватний як частина однотонної інстанції.

Збереження пам'яті - головна перевага використання цього об'єкта, який використовується повторно, а не створюється знову і знову.

Висновок

У цьому документі ми розповіли, як працює Singleton Class за допомогою діаграми, алгоритму та коду зразка класу UML. Клас Singleton використовується, коли нам потрібен лише один об’єкт для класу та глобальна точка доступу до цього об’єкта. Дві форми, такі як "Рання інстанція" та "Ледача миттєвість", можуть використовуватися на основі вимоги.

Рекомендовані статті

Це посібник для класу Singleton на Java. Тут ми обговорюємо, як однотонний клас працює в Java, а також імплементація, яка включає ліниву інстанцію та ранню інстанцію. Ви також можете ознайомитися з іншими запропонованими нами статтями, щоб дізнатися більше -

  1. Що таке шаблон дизайну на Java?
  2. Анотація класу на Java
  3. Анотації на Java
  4. BorderLayout на Java
  5. JRE проти JVM | 8 найкращих відмінностей (Інфографіка)
  6. Як працювати статичний метод у JavaScript?