Johdatus Java-yksikön Singleton-luokkaan
Singleton-luokka rajoittaa luokan objektin luomisen vain yhdeksi Java-virtuaalikoneessa. Se auttaa myös tarjoamaan objektille globaalin tukiaseman. Tätä mallikuvaa käytetään yleisesti välimuistissa, tiivistelmätehtaassa, hakkuissa, prototyypissä jne. Sitä käytetään myös ydinjava-luokissa, kuten java.awt.Desktop, java.lang.Runtime. Java.lang.Runtime -sovelluksessa Java tarjoaa luokan Runtime, joka tarkoittaa nykyistä Runtime Environment -aluetta, jossa sovellus on käynnissä. Tämä auttaa yhdistämään sovelluksen ja ajonaikaisen ympäristön. Objektin pitäisi olla yksi, koska JRE on ainutlaatuinen. Java.awt.Desktop-sovelluksessa luokan Desktop avulla sovellukset voivat käynnistää URI: n tai tiedoston käyttäjän oletusselaimen, sähköpostiohjelman jne. Kanssa. Tässäkin luokassa on oltava vain yksi esiintymä.
Kuinka Singleton-luokka toimii Java-ohjelmassa
Singleton-luokan voi luoda kahdella tavalla.
- Aseta rakentaja yksityiseksi objektin luomisen rajoittamiseksi.
- Luo staattinen menetelmä objektin ilmentymän saamiseksi, jotta voit käsitellä objektin luomista vain luokan sisällä.
Katsotaanpa nyt Singleton-luokan luokan UML (Unified Modeling Language) -kaavio.
Class UML -diagrammissa ensimmäinen osio edustaa luokan nimeä, toinen osio edustaa määritteitä ja kolmas osio edustaa menetelmiä. Lisäksi + ilmaisee julkisia määritteitä tai menetelmiä ja - osoittaa yksityisiä ominaisuuksia tai menetelmiä. Singleton Class UML -diagrammissa luokan nimi on Singleton ja sillä on päämenetelmä. Päämenetelmä, getInstance-menetelmä ja sampleMethod ovat ainoat menetelmät, jotka ovat julkisia yllä olevassa kaaviossa. Suunnittelija- ja esiintymäattribuutti on asetettu yksityiseksi osana toteutustamme. Tämä julkinen päämenetelmä pyytää ilmentymää ja getInstance palauttaa sen päämenetelmään.
Instantiaation perusteella ainoa ero normaalin Java-luokan ja Singleton-luokan välillä on, että käytämme Java-luokassa rakentajaa, kun taas Singletonissa käytämme getInstance () -menetelmää.
Singleton-mallikuviot ovat kahta muotoa.
- Laiska Instantiation: Ilmentymän luominen tarvittaessa
- Varhainen toteutus: Ilmentymien luominen latausaikana.
1. Laiska hetkellinen
Lazy Instantiation -luokassa luokkainstanssi luodaan, kun sitä vaaditaan. Se luodaan synkronoidussa menetelmässä tai lohkossa kilpailuolosuhteiden välttämiseksi, jotka voivat esiintyä monisäikeisessä ympäristössä.
2. Varhainen äkillisyys
Varhaisessa toteutuksessa luominen ilmentymä latautuu. Vaikka tämä on yksinkertaisin lähestymistapa, sillä on haittana se, että ilmentymien luominen on riippumatta siitä, käytetäänkö sitä vai ei.
Seuraavassa osassa selitetään esimerkki laiskoista äkillisyydestä ja varhaisesta äkillisyydestä.
Singleton-luokan toteutus Java-ohjelmassa
Kuten edellä on keskusteltu, Singleton-luokka voidaan luoda varhaisessa vaiheessa tai laiska-aineistossa.
Laiska Instantiation
Seuraavassa on ohjeet Lazy Instantiation -sovelluksen toteuttamiseksi
1. Aseta Constructor yksityiseksi.
Esimerkiksi luomme luokan LazyClass. Rakentaja on alla olevan kuvan mukainen.
private LazyClass ()
(
)
2. Luo luotuun luokkaan yksityinen staattinen ilmentymä.
private static LazyClass instance;
3. Luo staattinen synkronoitu menetelmä, joka saa luokan ilmentymän luomaan.
public static synchronized LazyClass getInstance()
(
)
4. Tarkista ensin getInstance () -menetelmässä, onko mitään esiintymää vai ei. Jos sitä ei löydy, luo se. Muuta palauta ilmentymä.
if(instance == null)
(
instance = new LazyClass ();
)
return instance;
Katsokaamme nyt sitä näytekoodilla.
//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();
)
)
lähtö:
Tässä luodaan sen sijaan, että luotaisiin ilmentymää lataushetkellä, se luodaan synkronoidun lohkon sisälle. Ymmärrettävyyden lisäämiseksi annetaan myös näytemenetelmä, joka on suojattu useammalta kuin yhdeltä objektin luomiselta.
Varhainen äkillisyys
Nyt nähdään vaiheet varhaiseksi hetkeämiseksi. Se on samanlainen kuin Lazy-hetkennys, paitsi että se ei käytä mitään synkronoitua menetelmää tai lohkoa.
1. Aseta Constructor yksityiseksi.
Esimerkiksi luomme luokan EarlyClass. Rakentaja on alla olevan kuvan mukainen.
private EarlyClass () ()
(
)
2. Luo luotuun luokkaan yksityinen staattinen ilmentymä.
private static EarlyClass ins = new EarlyClass();
3. Luo staattinen menetelmä, joka saa luokan ilmentymän luomaan.
public static EarlyClass getInstance()
(
)
Seuraava on varhaisen äkillisyyden näytekoodi.
//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();
)
)
lähtö:
Yllä olevassa ohjelmassa ilmentymä luodaan latausajassa ja se palautetaan menetelmällä getInstance (). Lisäksi Constructor on asetettu yksityiseksi osaksi singletonin toteutusta.
Muistin säästö on tärkein etu, kun käytät tätä objektia uudelleen, eikä sitä luoda uudelleen ja uudelleen.
johtopäätös
Tässä asiakirjassa on käsitelty Singleton-luokan toimintaa luokan UML-kaavion, algoritmin ja näytekoodin avulla. Singleton-luokkaa käytetään, kun tarvitsemme luokalle vain yhden objektin ja objektin globaalin tukiaseman. Kahta muotoa, kuten varhaista hetkeä ja laiskaa hetkeä, voidaan käyttää vaatimuksen perusteella.
Suositellut artikkelit
Tämä on opas Singleton-luokkaan Java-kielellä. Tässä keskustellaan siitä, kuinka singleton-luokka toimii javalla, sekä toteutuksen kanssa, joka sisältää laiskojen ja varhaisten välitysten. Voit myös käydä läpi muiden ehdotettujen artikkeleidemme saadaksesi lisätietoja -
- Mikä on Java-suunnittelumallit?
- Abstraktin luokan Java
- Java-merkinnät
- BorderLayout Java-sovelluksessa
- JRE vs. JVM | 8 parasta eroa (infografia) kanssa
- Kuinka käyttää staattista menetelmää JavaScriptillä?