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.
- Konstruktor postavite kao privatnog kako biste ograničili stvaranje objekta.
- 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 -
- Što je uzorak dizajna u Javi?
- Sažetak klase na Javi
- Java primjedbe
- BorderLayout u Javi
- JRE vs JVM | Top 8 razlike s (Infographics)
- Kako raditi statičku metodu u JavaScript-u?