Singleton-kuvio on yksi yksinkertaisimmista suunnittelukuvioista. Yksittäistä suunnittelumallia käyttävällä luokalla on yksi esiintymä, jota se hallitsee itse. Tämä luokka estää muita luokkia luomasta siitä ilmentymää.

Yksittäinen luokka tarjoaa myös yhden globaalin tukiaseman luomalleen ilmentymälle. Joten jokaisen luokan, joka haluaa yksittäisen luokan esiintymän, on käytettävä sitä yhden tukiasemansa kautta.

Javan erinomainen tuki olio-ohjelmointiin tekee singleton-suunnittelukuvion käyttämisestä helppoa.

Singleton-mallin käyttöönotto Javalla

On olemassa monia tapoja toteuttaa singleton-kuvio Javassa; innokkaat ja laiskot lähestymistavat ovat yleisiä muunnelmia. Jokaisella näistä lähestymistavoista on omat hyvät ja huonot puolensa. Siksi valitsemasi menetelmän tulisi riippua sovelluksesi toiminnasta.

Innokas lähestymistapa

Singleton-mallin toteuttaminen innokkaalla lähestymistavalla tarkoittaa, että luokka luo itsestään uuden esiintymän latautuessaan.

julkinenluokkaaEagerSingleton{
yksityinenstaattinen EagerSingleton-instanssi = Uusi EagerSingleton();

yksityinenEagerSingleton(){}

instagram viewer

julkinenstaattinen EagerSingleton getInstance(){
palata ilmentymä;
}
}

The EagerSingletonJava luokka luo itsestään uuden ilmentymän latautuessaan. Se määrittää tämän ilmentymän yksityiselle staattiselle esiintymän muuttuja, joka on käytettävissä vain singleton-luokassa. Ainoa ulkoinen pääsy instanssimuuttujaan on getInstance() menetelmä. Tämä menetelmä palauttaa luokan aiemmin luodun esiintymän.

Tämä lähestymistapa on loistava, koska se estää monisäikeinen ongelma, joka on yksi singleton mallin suurimmista haasteista. Se ratkaisee monisäikeisen ongelman luomalla itsestään uuden ilmentymän ennen kuin mikään uusi säie voi käyttää ilmentymämuuttujaansa. Tämä takaa, että jokaisella säikeellä on pääsy vain samaan ilmentymään.

Innokas lähestymistapa on kuitenkin käytännöllinen vain, jos sovelluksesi käyttää singleton-luokan esiintymää, kun se alkaa toimia. Muussa tapauksessa luot objektin ennen kuin sovellus tarvitsee sitä ja käytät resursseja tarpeettomasti.

Laiska lähestymistapa

Laiska lähestymistapa on ratkaisu innokkaan lähestymistavan ongelmaan. Sen avulla voit luoda uuden yksittäisen luokan esiintymän vain, kun ohjelmasi tarvitsee sitä.

julkinenluokkaaLazySingleton{
yksityinenhaihtuviastaattinen LazySingleton-esiintymä;

yksityinenLazySingleton(){}

julkinenstaattinen LazySingleton getInstance(){
jos (esim. == tyhjä) {
synkronoitu (LazySingleton.luokkaa) {
jos (esim. == tyhjä) {
esimerkki = Uusi LazySingleton();
}
}
}

palata ilmentymä;
}
}

Laiska lähestymistapa ratkaisee monisäikeisen ongelman käyttämällä synkronoitu avainsana. Tämä estää kahta säiettä pääsemästä instanssimuuttujaan samanaikaisesti. Synkronointi on kuitenkin kallista, joten sovellus käyttää sitä vain kerran, kun se kutsuu ensimmäistä kertaa getInstance().

Milloin käyttää Singleton-kuviota

Singleton-kuvio on hyödyllinen monissa skenaarioissa valintaikkunoiden luomiseen, rekisteriasetusten käsittelyyn tai säieryhmien hallintaan.

Toinen yleinen käyttö singleton mallille on luoda keskusluokka, joka hallitsee tietokantayhteyksiä.