Java tutvustus Singletoni klassis
Singletoni klass piirab klassi objekti loomise Java-virtuaalmasinas ainult ühega. Samuti aitab see pakkuda objektile globaalset pöörduspunkti. Seda kujundusmustrit kasutatakse tavaliselt vahemällu salvestamisel, Abstract Factory'is, logimisel, prototüübis jne. Seda kasutatakse ka peamistes Java-klassides, näiteks java.awt.Desktop, java.lang.Runtime. Java.lang.Runtime pakub Java klassi Runtime, mis tähistab praegust Runtime Environment, kus rakendus töötab. See aitab rakenduse ja käituskeskkonnaga liidestada. Objekti peaks olema üks, kuna JRE on ainulaadne. Java.awt.Desktopis võimaldab klassi töölauarakendus rakendustel käivitada URI või faili kasutaja vaikimisi brauseriga, meilikliendiga jne. Ka siin peab klassil olema ainult üks eksemplar.
Kuidas Singletoni klass Java töötab
Singletoni klassi saab luua kahel viisil.
- Objekti loomise piiramiseks määrake ehitaja privaatseks.
- Objekti eksemplari saamiseks looge staatiline meetod, nii et saate objekti loomisega hakkama ainult klassi sees.
Vaatame nüüd Singletoni klassi klassi UML-i diagrammi (Unified Modeling Language).
Klassi UML diagrammil tähistab esimene sektsioon klassi nime, teine partitsioon tähistab atribuute ja kolmas partitsioon tähistab meetodeid. Samuti tähistab + avalikke atribuute või meetodeid ja - tähistab privaatseid atribuute või meetodeid. Meie Singletoni klassi UML-diagrammil on klassi nimi Singleton ja sellel on põhimeetod. Põhimeetod, getInstance'i meetod ja sampleMethod on ainsad ülaltoodud diagrammil avalikud meetodid. Konstruktori ja eksemplari atribuut on meie rakenduse osana seatud privaatseks. See avalik peamine meetod nõuab eksemplari ja getInstance tagastab selle põhimeetodile.
Instantiatsiooni põhjal on tavalise Java klassi ja Singleton Classi ainus erinevus selles, et Java klassis kasutame konstruktorit, Singletonis aga getInstance () meetodit.
Singletoni kujundusmuster on kahel kujul.
- Lazy Instantiation: vajaduse korral eksemplari loomine
- Varane intuitsioon: eksemplari loomine laadimise ajal.
1. Laisk intuitsioon
Lazy Instantiation'is luuakse klassi esinemisjuhis, kui seda nõutakse. See luuakse sünkroonitud meetodi või ploki abil, et vältida võistlusolusid, mis võivad tekkida mitme keermega keskkonnas.
2. Varane intuitsioon
Varase intuitsiooni korral luuakse eksemplar laadimise ajal. Kuigi see on kõige lihtsam lähenemisviis, on selle puuduseks see, et eksemplari loomine toimub sõltumata sellest, kas sellele pääseb juurde või mitte.
Järgnevas jaotises on selgitatud laiska ja varajase äratundmise näidet.
Singleton-klassi rakendamine Java-s
Nagu ülalpool arutatud, saab Singletoni klassi luua varajases või laiskjalases.
Laisk intuitsioon
Järgnevalt on toodud juhised laiskade intuitsiooni rakendamiseks
1. Valige Constructor privaatseks.
Näiteks loome klassi LazyClass. Konstruktor on järgmine.
private LazyClass ()
(
)
2. Looge loodud klassile privaatne staatiline eksemplar.
private static LazyClass instance;
3. Looge staatiline sünkroniseeritud meetod, mis loob klassi eksemplari.
public static synchronized LazyClass getInstance()
(
)
4. Kontrollige meetodil getInstance () kõigepealt, kas mõni eksemplar on olemas või mitte. Kui ei leita, looge see. Muudel juhtudel tagastage kohtuasi.
if(instance == null)
(
instance = new LazyClass ();
)
return instance;
Vaatame nüüd seda näidiskoodi abil.
//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();
)
)
Väljund:
Selle asemel, et luua eksemplari laadimise ajal, luuakse see sünkroniseeritud plokis. Paremaks mõistmiseks antakse ka näidismeetod, mis on kaitstud enam kui ühe objekti loomise eest.
Varane intuitsioon
Vaadakem nüüd varase intuitsiooni samme. See sarnaneb Lazy-hetkega, välja arvatud see, et see ei kasuta sünkroonitud meetodit ega blokeerimist.
1. Valige Constructor privaatseks.
Näiteks loome klassi EarlyClass. Konstruktor on järgmine.
private EarlyClass () ()
(
)
2. Looge loodud klassile privaatne staatiline eksemplar.
private static EarlyClass ins = new EarlyClass();
3. Looge staatiline meetod, mis loob klassi eksemplari.
public static EarlyClass getInstance()
(
)
Järgnevalt on toodud varase intuitsiooni näidiskood.
//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();
)
)
Väljund:
Ülaltoodud programmis luuakse eksemplar laadimisajaga ja tagastatakse meetodil getInstance (). Lisaks on Constructor seatud privaatseks osana singletoni hetkestamisest.
Mälu kokkuhoid on selle kasutamise peamine eelis, kuna objekti taaskasutatakse ja seda ei looda ikka ja jälle.
Järeldus
Selles dokumendis oleme hõlmanud, kuidas Singletoni klass töötab klassi UML-diagrammi, algoritmi ja näidiskoodi abil. Singletoni klassi kasutatakse siis, kui meil on klassis vaja ainult ühte objekti ja selle objekti globaalset pöörduspunkti. Neid kahte vormi, nagu varajane hetkeselektsioon ja laiskade äratundmine, saab nõude alusel kasutada.
Soovitatavad artiklid
See on Java Singletoni klassi juhend. Siin räägime sellest, kuidas singletoniklass javas töötab, koos juurutamisega, mis hõlmab laiska ja varajast hetkeseisu. Lisateavet leiate ka meie muudest soovitatud artiklitest -
- Mis on Java kujundusmuster?
- Abstraktne klass Java keeles
- Java märkused
- BorderLayout Java-s
- JRE vs JVM | 8 parimat erinevust (infograafika)
- Kuidas töötada staatilist meetodit JavaScriptis?