Singleton klasa na Javi - Kako klasa Singleton djeluje na Javi?

Sadržaj:

Anonim

Uvod u Singleton klasu na Javi

Singleton klasa ograničava stvaranje objekta za klasu na samo jedan u java virtualnom stroju. Također pomaže u pružanju globalne pristupne točke do objekta. Ovaj se obrazac dizajna najčešće koristi u predmemoriranju, apstraktnoj tvornici, zapisi, prototipu itd. Također se koristi u osnovnim java klasama kao što su java.awt.Desktop, java.lang.Runtime. U java.lang.Runtime, Java nudi klasu Runtime koja označava trenutnu Runtime Environment u kojoj se aplikacija izvodi. To pomaže u povezivanju aplikacije i okruženja za vrijeme izvođenja. Trebao bi postojati jedan objekt jer je JRE jedinstven. U java.awt.Desktop, klasa Desktop omogućava aplikacijama pokretanje URI-a ili datoteke sa zadanim preglednikom korisnika, klijenta e-pošte itd. Ovdje također mora postojati samo jedna instanca klase.

Kako klasa Singleton djeluje na Javi

Klasa Singleton može se stvoriti na dva načina.

  1. Konstruktor postavite kao privatnog kako biste ograničili stvaranje objekta.
  2. Napravite statičku metodu da biste dobili instancu objekta tako da možete rukovati s stvaranjem objekta samo unutar klase.

Sada ćemo vidjeti dijagram klase UML (Unified Modeling Language) dijagram klase Singleton.

U UML dijagramu klase, prva particija predstavlja ime klase, druga particija predstavlja atribute, a treća particija predstavlja metode. Također, + označava javne atribute ili metode i - označava privatne atribute ili metode. U našem UML dijagramu klase Singleton ime klase je Singleton i ima glavnu metodu. Glavna metoda, metoda getInstance i sampleMethod jedine su metode koje su javne u gornjem dijagramu. Atribut konstruktora i instance postavljen je kao privatni dio naše implementacije. Ova javna glavna metoda traži instancu i getInstance ga vraća u glavnu metodu.

Na temelju Instantiation-a, jedina razlika između normalne klase Java i klase Singleton je ta što ćemo koristiti konstruktor u Java klasi, dok ćemo u Singletonu koristiti getInstance () metodu.

Singleton uzorak dizajna je dva oblika.

  • Lažna instancija: stvaranje instancije kada je potrebno
  • Early Instantiation: Izrada instancije u vrijeme učitavanja.

1. Lijena instantnost

U Lazy Instantiation stvara se instanca klase kad se traži. Stvara se u sinkronizacijskoj metodi ili bloku kako bi se izbjegli uvjeti utrke koji se mogu pojaviti u okruženju s više niti.

2. rana instantnost

U Early Instantiation stvara se instanca u trenutku učitavanja. Iako je to najjednostavniji pristup, nedostatak je stvaranja instancije bez obzira na to pristupi se ili ne.

Primjer lijene instancije i ranog trenutka objašnjen je u sljedećem odjeljku.

Implementacija klase Singleton u Javi

Kao što je spomenuto gore, klasa Singleton može se stvoriti u Early Instantiation ili Lazy Instantiation.

Lijena instantnost

Slijede koraci za implementaciju Lazy Instantiation-a

1. Konstruktor postavite kao privatnog.

Na primjer, stvaramo klasu LazyClass. Konstruktor će biti kao što je prikazano u nastavku.

private LazyClass ()
(
)

2. Stvorite privatnu statičku instancu za kreiranu klasu.

private static LazyClass instance;

3. Stvorite statičku sinhroniziranu metodu koja će stvoriti instancu klase.

public static synchronized LazyClass getInstance()
(
)

4. U metodi getInstance () prvo provjerite postoji li neka instanca ili ne. Ako ga ne pronađete, izradite ga. Inače vratite instancu.

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

E sad, pogledajmo to pomoću uzorka koda.

//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();
)
)

Izlaz:

Ovdje se umjesto stvaranja instancije u vrijeme učitavanja stvara unutar sinkroniziranog bloka. Za bolje razumijevanje dan je i uzorak metoda koja je zaštićena od više stvaranja objekata.

Rana instantnost

Pogledajmo sada korake za ranu Instantiation. Slično je i s Lazy instanciationom, samo što ne koristi nijednu sinkronizacijsku metodu ili blok.

1. Konstruktor postavite kao privatnog.

Na primjer, stvaramo klasu EarlyClass. Konstruktor će biti kao što je prikazano u nastavku.

private EarlyClass () ()
(
)

2. Stvorite privatnu statičku instancu za kreiranu klasu.

private static EarlyClass ins = new EarlyClass();

3. Stvorite statičku metodu kojom će se stvoriti instanca klase.

public static EarlyClass getInstance()
(
)

Slijedi uzorak koda za rano otkrivanje.

//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();
)
)

Izlaz:

U gornjem programu kreira se instanca u vremenu učitavanja i vraća se metodom getInstance (). Pored toga, Konstruktor je postavljen kao privatni kao dio pojedinačne instancije.

Spremanje memorije glavna je prednost korištenja jer se objekt ponovno upotrebljava, a ne stvara se stalno i iznova.

Zaključak

U ovom smo dokumentu opisali kako funkcionira klasa Singleton uz pomoć UML dijagrama, algoritma i uzorčnog koda klase. Klasa Singleton koristi se kada nam je potreban samo jedan objekt za klasu i globalna pristupna točka tom objektu. Dva oblika kao što su Early instantiation i Lazy Instantiation mogu se koristiti na temelju zahtjeva.

Preporučeni članci

Ovo je vodič za Singleton klasu na Javi. Ovdje smo raspravljali o tome kako klasa singleton djeluje u Javi, zajedno s implementacijom koja uključuje lijenu primjerak i ranu primjenu. Možete i proći naše druge predložene članke da biste saznali više -

  1. Što je uzorak dizajna u Javi?
  2. Sažetak klase na Javi
  3. Java primjedbe
  4. BorderLayout u Javi
  5. JRE vs JVM | Top 8 razlike s (Infographics)
  6. Kako raditi statičku metodu u JavaScript-u?