U Javi je singleton klasa klasa koja u određenom trenutku može imati samo jedan primjerak. To je jedan od pet obrazaca kreativnog dizajna u Javi koji pomaže u razvoju napora bez napora . Kroz medij ovog članka dat ću vam jasan uvid u to što je singleton klasa u Javi i kako je možete stvoriti.
Ispod su teme koje ću obrađivati u ovom članku:
kako instalirati php na Windows -
Započnimo.
Što je Singleton klasa u Javi?
Laički rečeno, Singleton klasa u Javi je klasa koja joj omogućuje pristup kroz pojedinačne instance. Ovaj obrazac dizajna služi za ograničavanje nepotrebne instancije klase i osiguravanje da postoji samo jedna postoji u bilo kojem trenutku po JVM instanci. Dakle, s ovim uzorkom, bilo koja klasa koja je definirana kao Singleton ima samo jednu instancus globalnom točkom pristupa. Za razliku od normalnih klasa, jednokračna klasa se ne uništava na kraju životnog ciklusa aplikacije.
Ali zašto nam je uopće potreban Singleton Class?
Pa, ograničavanjem stvaranja instance klase štedi memorijski prostor jer se sada objekt neće kreirati svaki put kad se podnese novi zahtjev. Umjesto toga, jedan će se objekt koristiti više puta. To je razlog zbog kojeg se Singleton obrazac u Javi uglavnom koristi i baze podataka. U osnovi se koristi za bilježenje, predmemoriranje, spremanje niti, postavke konfiguracije i još mnogo toga.
Nadam se da vam je jasan koncept klase Singleton u Javi. Dakle, idemo dalje u ovomeČlanak Singleton Class u Javi i pogledajte kako su stvoreni.
Načini dizajniranja Java Singleton klase
Da biste napravili jednostruku klasu u Javi, trebaju vam sljedeće tri stvari:
- statični član klase
- privatni konstruktor
- statička tvornička metoda
Budući da Java omogućuje programerima da istražuju svoje horizonte, postojena brojne načine na koje možete dizajnirati Singleton klasu. U nastavku sam naveo najpopularnije.
- Metoda nestrpljive inicijalizacije
- Lijena metoda inicijalizacije
- Sigurna metoda s jednim navojem
- Lijena inicijalizacija metodom dvostrukog zaključavanja
- Metoda lijenog opterećenja
- Metoda inicijalizacije statičkog bloka
Zaronimo sada dublje u svaki od ovih pristupa jedan po jedan.
1. Način nestrpljive inicijalizacije
Ovo je najjednostavnija metoda za stvaranje Singleton klase gdje se instanca kreira u trenutku učitavanja klase. Da biste stvorili singleton klasu pomoću ove metode, morate slijediti dolje navedene korake:
- Proglasite konstruktor privatnim.
- Sljedeći je korak stvaranje privatnog člana klase za ovu Singleton klasu.
- Sada trebate definirati tvorničku metodu koja će se koristiti za vraćanje objekta vaše klase koju smo stvorili kao instancu člana klase.
- Možete čak proglasiti statičnog člana javnim ako želite izravno pristupiti ovoj statičnoj instanci.
Sada, da vidimo kako ih implementirati.
// Eager Initialization javna klasa EagerSingleton {private static final EagerSingleton INSTANCE = new EagerSingleton () private EagerSingleton () {} public static EagerSingleton getInstance () {return INSTANCE}}
Ako vidite kôd, možete primijetiti da svaki put kada instanciramo objekt koji koristimogetInstance ()metoda, a ne pozivanje na klasu graditelj .Ali to ima svoje nedostatke. Ako ovu metodu koristite za izradu jednostruke klase, tada će se stvoriti instanca bez obzira na to koristi li je aplikacija ili ne.
Krenimo dalje i vidjet ćemo drugi način stvaranja singleton klase u Javi.
2. Metoda lijene inicijalizacije
Ova metoda naziva se lijena inicijalizacija jer odgađa stvaranje instance klase do prve upotrebe. Mislim na to da se ovom metodom objekt stvara samo ako je potreban. Pomaže u izbjegavanju nepotrebnog stvaranja . Da biste na ovaj način dizajnirali singleton klasu, morate slijediti dolje navedene korake:
- Prije svega, proglasite konstruktor privatnim.
- Tada trebate stvoriti privatnu statičku instancu za ovu klasu, ali je još ne morate instancirati.
- Konačno, stvorite tvorničku metodu koja će prvo provjeriti je li član instance null ili nije. Ako ne, tada će za vas stvoriti instancu klase singleton i vratiti je.
Ispod kôd pokazuje kako to izvesti.
// Lazy Initialization javna klasa LazySingleton {private static LazySingleton INSTANCE = null private LazySingleton () {} public static LazySingleton getInstance () {if (INSTANCE == null) {synchronized (LazySingleton.class) {INSTANCE = new LazySingleton ()}} povratak INSTANCE}}
3. Sigurnosni konac Metoda
Ali gornji pristup može stvoriti neke probleme u istodobnim scenarijima. Budući da se jednokračni uzorak uglavnom koristi s više niti i akoviše niti istovremeno ulazi u uvjet if to može pokretati probleme. Da bismo to izbjegli, pokušavamo stvoriti jedinstvenu klasu sigurnu u nit sinhroniziranjem globalne metode pristupa. To osigurava da samo jedna nit izvršava ovu metodu u bilo kojem trenutku. Pogledajte donji kod da biste vidjeli implementaciju:
// Thread Safe Singleton javna klasa ThreadSafeSingleton {private static ThreadSafeSingleton INSTANCE private ThreadSafeSingleton () {} javni statički sinkronizirani ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = new ThreadSafeSington}
Ali s vremena na vrijeme ovaj pristup također može postati vrlo glomazan, kao i svaki put kad metodatreba pozvati da se brava oslobodi prije nego što je metoda može upotrijebiti. To rezultira usporavanjem procesa i vodi nas do sljedećeg pristupa koji jeLijena inicijalizacija s Double Lockom.
4. Lijena inicijalizacija s Double Lockom Metoda
U ovom pristupu ne sinkroniziramo metode. Umjesto toga, kôd za stvaranje objekta omotavamo unutar sinkroniziranog bloka.To možete reći provjerom zaključavanja niti prijesmanjuje broj stjecanja brava. Ovaj pristup obično rezultira poboljšanjem performansi aplikacije. Pogledajte donji kod da biste vidjeli kako se to radi.
struktura podataka rječnika u javi
// Lazy Initialization with Double Lock javna klasa LazyDoubleLockSingleton {private static LazyDoubleLockSingleton INSTANCE = null private LazyDoubleLockSingleton () {} public static LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {sinkronizirano null) {INSTANCE = new LazyDoubleLockSingleton ()}}} return INSTANCE}}
5. Metoda lijenog opterećenja
Ova metoda temelji se na JSL (Java Language Specification) i prema tome učitat će članove statičkih podataka samo kada su potrebni. Dakle, kada se vaša singleton klasa učita u JVM, ne stvara se nijedna instanca. Dalje, tijekom izvršavanja programa, globalna metoda se poziva rednim redoslijedom. Ovom metodom ne morate izričito sinkronizirati statički getInstance () za učitavanje i inicijalizaciju. Statični član klase pozvat će se u pravilnom slijedu, ostatak istodobnih poziva globalne metode vraćaju se istim redoslijedom bez potrebe za izvršavanjem režijskih troškova sinkronizacije.
Ispod je kôd za izvođenje istog.
// Lazy Load Method javna klasa LazyLoadSingleton {private LazyLoadSingleton () {} private static class SingletonClassHolder {static final Var INSTANCE = new LazyLoadSingleton ()} public static LazyLoadSingleton getInstance () {return SingletonClassHolder.INSTANCE}}
6. Metoda inicijalizacije statičkog bloka
Ova metoda stvaranja singleton klase u Javi jeslično željnoj metodi inicijalizacije. Jedina razlika je u tome što se instanca za ovu klasu kreira u statičkom bloku funkcionalnost.
// Inicijalizacija statičkog bloka javna klasa StaticBlockSingleton {privatni statički StaticBlockSingleton INSTANCE privatni StaticBlockSingleton () {} // rukovanje iznimkom u statičkom bloku static {try {INSTANCE = new StaticBlockSingleton ()} catch (Exception e) {throw new RuntimeException ('Iznimka je ostvarena tijekom stvaranja klase Singleton ')}} javni statični StaticBlockSingleton getInstance () {return INSTANCE}}
Ovo nas dovodi do kraja ovog članka o klasi Singleton u Javi. Ako želite znati više o Javi, možete se obratiti našoj .
Sad kad ste shvatili što je Singleton klasa u Javi, pogledajte Edureka, pouzdane tvrtke za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Edurekin tečaj za obuku i certificiranje Java J2EE i SOA dizajniran je za studente i profesionalce koji žele biti programer Java. Tečaj je dizajniran da vam pruži početnu prednost u Java programiranju i osposobi vas za osnovne i napredne Java koncepte zajedno s raznim Java okvirima poput Hibernate & Spring.
Imate pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare ovog članka o 'Singleton Class in Java', a mi ćemo vam se javiti što je prije moguće.