Javassa singleton-luokka on luokka, jolla voi olla vain yksi esiintymä tiettynä ajankohtana. Se on yksi viidestä Java-mallista, jotka auttavat kehittämään vaivattomasti . Tämän artikkelin välityksellä annan sinulle selkeän oivalluksen siitä, mikä on Java-singleton-luokka ja miten voit luoda sen.
Seuraavassa on aiheita, joita käsittelen tässä artikkelissa:
Aloitetaan.
Mikä on Java-Singleton-luokka?
Maalliselta kannalta Singleton-luokka Java on luokka, joka sallii pääsyn siihen yhden esiintymän kautta kerrallaan. Tämän suunnittelumallin tarkoituksena on rajoittaa luokan tarpeetonta ilmentymistä ja varmistaa, että vain yksi on olemassa milloin tahansa JVM-esiintymää kohden. Siten tällä mallilla kaikilla luokilla, jotka määritellään Singletoniksi, on vain yksi esiintymämaailmanlaajuinen yhteyspiste siihen. Toisin kuin normaaleissa luokissa, yksittäinen luokka ei tuhoutu sovellusten elinkaaren loppuun mennessä.
Mutta miksi me tarvitsemme ensinnäkin Singleton-luokkaa?
Rajoittamalla luokan ilmentymän luomista se säästää muistitilaa, koska nyt objektia ei luoda joka kerta, kun uusi pyyntö tehdään. Sen sijaan yhtä objektia käytetään toistuvasti. Tämän vuoksi Java-Singleton-mallia käytetään enimmäkseen ja tietokantasovellukset. Sitä käytetään periaatteessa kirjaamiseen, välimuistiin tallentamiseen, säikeiden yhdistämiseen, kokoonpanoasetuksiin ja moniin muihin.
mikä on koneoppimisen ylikuormitusta
Toivon, että olet selvillä Java-Singleton-luokan käsitteestä. Joten, nyt nyt edetä tässäSingleton-luokka Java-artikkelissa ja katso, miten ne luodaan.
Tapoja suunnitella Java Singleton -luokka
Jotta voisit tehdä luokan singletin Javalassa, tarvitset seuraavat kolme asiaa:
- luokan staattinen jäsen
- yksityinen rakentaja
- staattinen tehdasmenetelmä
Koska Java antaa kehittäjien tutkia näköalojaan, niitä onuseita tapoja suunnitella Singleton-luokka. Alla on lueteltu suosituimmat.
- Innokas alustusmenetelmä
- Laiska alustusmenetelmä
- Thread Safe Singleton -menetelmä
- Laiska alustus kaksoislukitusmenetelmällä
- Laiska latausmenetelmä
- Staattinen lohkon alustusmenetelmä
Sukelletaan nyt syvemmälle kuhunkin näistä lähestymistavoista yksi kerrallaan.
1. Innokas alustusmenetelmä
Tämä on helpoin tapa luoda Singleton-luokka, jossa ilmentymä luodaan luokan lataamisen yhteydessä. Jos haluat luoda singleton-luokan tällä menetelmällä, sinun on noudatettava alla mainittuja vaiheita:
ohjelma kääntää numero java
- Ilmoita rakentaja yksityiseksi.
- Seuraava askel on luoda yksityisen luokan jäsen tälle Singleton-luokalle.
- Nyt sinun on määritettävä tehdasmenetelmä, jota käytetään luokan objektin palauttamiseen, jonka olemme luoneet luokan jäsenenä.
- Voit jopa julistaa staattisen jäsenen julkiseksi, jos haluat käyttää tätä staattista esiintymää suoraan.
Katsotaan nyt, miten nämä voidaan toteuttaa.
// Eager Initialization public class EagerSingleton {private static final EagerSingleton INSTANCE = new EagerSingleton () private EagerSingleton () {} public staattinen EagerSingleton getInstance () {return INSTANCE}}
Jos näet koodin, voit havaita, että joka kerta, kun havainnollistamme objektia, jota käytämmegetInstance ()menetelmä pikemminkin kuin luokan kutsuminen rakentaja .Mutta sillä on omat haittansa. Jos käytät tätä menetelmää luokan singletin tekemiseen, esiintymä luodaan riippumatta siitä, käyttääkö sovellus sitä vai ei.
Joten, siirrytään eteenpäin ja katsotaan toinen tapa luoda singleton-luokka Java.
2. Laiska alustusmenetelmä
Tätä menetelmää kutsutaan laiska-alustukseksi, koska se lykkää luokan ilmentymän luomista sen ensimmäiseen käyttöön. Tarkoitan, että tällä menetelmällä objekti luodaan vain, jos sitä tarvitaan. Se auttaa välttämään . Suunnitellaksesi yksittäisen luokan tällä tavalla, sinun on noudatettava alla lueteltuja vaiheita:
- Ensinnäkin julista rakentaja yksityiseksi.
- Sitten sinun on luotava yksityinen staattinen esiintymä tälle luokalle, mutta sinun ei tarvitse vielä instantisoida sitä.
- Luo lopuksi tehdasmenetelmä, joka tarkistaa ensin, onko ilmentymän jäsen tyhjä vai ei. Jos ei, se luo sinulle singleton-luokan instanssin ja palauttaa sen.
Koodin alapuolella näkyy, kuinka tämä tehdään.
// Lazy Initialization public class LazySingleton {private static LazySingleton INSTANCE = null private LazySingleton () {} public staattinen LazySingleton getInstance () {if (INSTANCE == null) {synchronized (LazySingleton.class) {INSTANCE = new LazySing palaa INSTANCE}}
3. Thread Safe Singleton Menetelmä
Edellä mainittu lähestymistapa voi kuitenkin herättää huolta samanaikaisissa skenaarioissa. Koska singleton-mallia käytetään pääasiassa monisäikeisten ja josuseita ketjuja syöttää if-ehdon samaan aikaan, se voi aiheuttaa ongelmia. Tämän välttämiseksi yritämme luoda langankestävän singleton-luokan synkronoimalla globaalin käyttömenetelmän. Tämä varmistaa, että vain yksi ketju suorittaa tämän menetelmän milloin tahansa. Katso alla oleva koodi nähdäksesi toteutuksen:
// Thread Safe Singleton public class ThreadSafeSingleton {private static ThreadSafeSingleton INSTANCE private ThreadSafeSingleton () {} public staattinen synkronoitu ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = new ThreadSafeSingleton ()}
Mutta toisinaan tästä lähestymistavasta voi tulla myös erittäin hankala kuin joka kerta menetelmäkutsutaan, sen on odotettava, että lukko vapautuu, ennen kuin menetelmä voi käyttää sitä. Tämä hidastaa prosessia ja johtaa meidät seuraavaan lähestymistapaanLaiska alustus kaksoislukituksella.
4. Laiska alustus kaksoislukituksella Menetelmä
Tässä lähestymistavassa emme synkronoi menetelmiä. Sen sijaan ympäröimme objektin luontikoodin synkronoituun lohkoon.Voit sanoa, että tarkistamalla langan lukot etukäteen, sevähentää lukkojen hankintaa. Tämä lähestymistapa johtaa yleensä sovelluksen suorituskyvyn parantamiseen. Tarkista alla oleva koodi nähdäksesi, miten se tehdään.
desimaalista binääriin pythonissa
// Lazy Initialization with Double Lock public class LazyDoubleLockSingleton {private static LazyDoubleLockSingleton INSTANCE = null private LazyDoubleLockSingleton () {} public static LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {synchronized (Lazy null) {INSTANCE = uusi LazyDoubleLockSingleton ()}}} palauta INSTANCE}}
5. Laiska latausmenetelmä
Tämä menetelmä perustuu JSL: ään (Java Language Specification) ja sen mukaan lataa staattisia datajäseniä vain, kun niitä tarvitaan. Joten kun singleton-luokkasi ladataan JVM: ään, instanssia ei luoda. Lisäksi ohjelman suorittamisen aikana käytetään globaalia menetelmää peräkkäisessä järjestyksessä. Tällä menetelmällä sinun ei tarvitse synkronoida staattista getInstance () -sovellusta lataamista ja alustamista varten. Staattinen luokan jäsen kutsutaan asianmukaisella jaksotetulla tavalla, loput globaalin menetelmän samanaikaisista invoinnista palautetaan samassa järjestyksessä tarvitsematta suorittaa synkronoinnin yleiskustannuksia.
Alla on koodi suorittaa sama.
// Lazy Load Method public class LazyLoadSingleton {private LazyLoadSingleton () {} private static class SingletonClassHolder {static final Var INSTANCE = new LazyLoadSingleton ()} public static LazyLoadSingleton getInstance () {return SingletonClassHolder.INSTANCE}
6. Staattinen lohkon alustusmenetelmä
Tämä tapa luoda singleton-luokka Java: ssa onsamanlainen kuin innokas alustusmenetelmä. Ainoa ero on, että tämän luokan ilmentymä luodaan staattisen lohkon sisällä toiminnallisuutta.
// Static Block Initialization julkinen luokka StaticBlockSingleton {private static StaticBlockSingleton INSTANCE private StaticBlockSingleton () {} // poikkeusten käsittely staattisen lohkon staattisessa {try {INSTANCE = new StaticBlockSingleton ()} catch (Exception e) {heittää uusi RuntimeException ('Poikkeus tapahtui luotaessa Singleton-luokkaa ')}} julkinen staattinen StaticBlockSingleton getInstance () {return INSTANCE}}
Tämä tuo meidät tämän Java-Singleton-luokan artikkelin loppuun. Jos haluat tietää enemmän Java: sta, voit viitata sivuillamme .
Nyt kun olet ymmärtänyt, mikä on Singleton-luokka Javassa, tutustu Edureka, luotettava verkko-oppimisyritys, jolla on yli 250 000 tyytyväisen oppijan verkosto, joka levisi ympäri maailmaa. Edurekan Java J2EE- ja SOA-koulutus- ja sertifiointikurssi on suunniteltu opiskelijoille ja ammattilaisille, jotka haluavat olla Java-kehittäjiä. Kurssi on suunniteltu antamaan sinulle etumatka Java-ohjelmointiin ja kouluttamaan sekä ydin- että edistyneitä Java-konsepteja sekä erilaisia Java-kehyksiä, kuten Hibernate & Spring.
Onko sinulla kysymys meille? Mainitse se tämän Singleton Class in Java -artikkelin kommenttiosassa, niin otamme sinuun yhteyttä mahdollisimman pian.