Singleton Class sa Java - Paano Gumamit ng Singleton Class?



Ang artikulong ito sa Singleton Class sa Java ay nagsasalita tungkol sa iba't ibang mga paraan kung saan ang isang klase ay maaaring gawing Singleton kasama ang mga pagpapatupad na pratical.

Sa Java, ang isang klase ng singleton ay isang klase na maaaring magkaroon ng isang halimbawa sa isang naibigay na oras. Ito ay isa sa limang mga pattern ng Paglikha ng Disenyo sa Java na makakatulong sa walang kahirap-hirap na pag-unlad ng . Sa pamamagitan ng daluyan ng artikulong ito, bibigyan kita ng mga malinaw na pananaw sa kung ano ang isang klase ng singleton sa Java at kung paano mo ito malilikha.

Nasa ibaba ang mga paksang sasaklawin ko sa artikulong ito:





Magsimula na tayo.

Ano ang Singleton Class sa Java?

Sa mga terminong layman, isang klase ng Singleton sa Java ang klase na nagpapahintulot sa pag-access dito sa pamamagitan ng isang solong pagkakataon nang paisa-isa. Ang pattern ng disenyo na ito ay para sa paghihigpit sa hindi kinakailangang instantiation ng isang klase at tinitiyak na isa lamang umiiral sa anumang punto ng oras bawat halimbawa ng JVM. Kaya, sa pattern na ito, ang anumang klase na tinukoy bilang Singleton ay may isang solong halimbawa lamangna may pandaigdigang punto ng pag-access dito. Hindi tulad ng normal na mga klase, ang isang singleton na klase ay hindi nawasak sa pagtatapos ng siklo ng buhay ng mga application.



Ngunit bakit kailangan muna natin ng Singleton Class?

Sa gayon, sa pamamagitan ng paghihigpit sa halimbawa ng paglikha ng isang klase ay nakakatipid ito ng memorya ng puwang habang ngayon ang object ay hindi malilikha sa tuwing may isang bagong kahilingan. Sa halip, isang solong bagay ang gagamitin nang paulit-ulit. Ito ang dahilan na ang pattern ng Singleton sa Java ay kadalasang ginagamit at mga aplikasyon ng database. Karaniwan itong ginagamit para sa pag-log, pag-cache, paglalagay ng thread, mga setting ng pagsasaayos at marami pa.

Inaasahan kong malinaw ka sa konsepto ng Singleton na klase sa Java. Kaya, hinayaan ngayon na magpatuloy sa karagdagang itoSingleton Class sa artikulo ng Java at tingnan kung paano nilikha ang mga ito.



Mga paraan upang Disenyo ng isang Klase ng Singleton ng Java

Upang makagawa ng isang singleton sa klase sa Java, kailangan mo ng mga sumusunod na tatlong bagay:

  1. static na kasapi ng isang klase
  2. pribadong tagapagtayo
  3. static na pamamaraan ng pabrika

Dahil pinapayagan ng Java ang mga developer na galugarin ang kanilang mga patutunguhan, mayroongisang bilang ng mga paraan kung saan maaari kang magdisenyo ng isang klase sa Singleton. Sa ibaba ay nakalista ko ang pinakatanyag.

  1. Sabik na Pamamaraan ng Simula
  2. Tamad na Pamamaraan ng Simula
  3. Ligtas na Paraan ng Singleton na Thread
  4. Lazy Initialization na may Pamamaraan ng Double Lock
  5. Tamad na Pamamaraan ng Pag-load
  6. Pamamaraan ng Inisyal na Simula ng Static

Sumisid tayo ngayon nang mas malalim sa bawat isa sa mga pamamaraang ito isa-isa.

1. Paraan ng Paunang Pasimulang

Ito ang pinakamadaling paraan ng paglikha ng isang klase ng Singleton kung saan nilikha ang halimbawa sa oras ng paglo-load ng klase. Upang lumikha ng isang klase ng singleton gamit ang pamamaraang ito, kailangan mong sundin ang mga hakbang na nabanggit sa ibaba:

  1. Ideklara nang pribado ang tagapagbuo.
  2. Susunod na hakbang ay upang lumikha ng isang pribadong miyembro ng klase para sa Singleton na klase.
  3. Ngayon, kailangan mong tukuyin ang isang paraan ng pabrika na gagamitin upang maibalik ang object ng iyong klase, na nilikha namin bilang isang halimbawa ng miyembro ng klase.
  4. Maaari mo ring ideklara ang isang static na miyembro ng publiko kung nais mong ma-access ang static na halimbawa na ito nang direkta.

Ngayon, tingnan natin kung paano ipatupad ang mga ito.

// Eager Initialization public class EagerSingleton {pribadong static final EagerSingleton INSTANCE = bagong EagerSingleton () pribadong EagerSingleton () {} pampublikong static na EagerSingleton getInstance () {return INSTANCE}}

Kung nakikita mo ang code, maaari mong obserbahan na sa tuwing sinisimulan namin ang isang bagay na ginagamit namingetInstance ()pamamaraan sa halip na ipagsabihan ang klase tagabuo .Ngunit mayroon itong sariling mga disbentaha. Kung gagamitin mo ang pamamaraang ito upang makagawa ng isang singleton sa klase, kung gayon ang isang halimbawa ay malilikha nang walang pagsasaalang-alang ng katotohanan kung ginagamit ito ng aplikasyon o hindi.

Kaya, magpatuloy tayo at makita ang isa pang paraan ng paglikha ng isang singleton na klase sa Java.

2. Tamad na Pamamaraan ng Simula

Ang pamamaraang ito ay tinatawag na tamad na pagsisimula dahil ipinagpaliban nito ang paglikha ng halimbawa ng klase hanggang sa unang paggamit nito. Ang ibig kong sabihin ay, sa pamamaraang ito, ang isang bagay ay nilikha lamang kung kinakailangan ito. Nakatutulong ito sa pag-iwas sa hindi kinakailangang paglikha ng . Upang mag-disenyo ng isang klase ng singleton sa ganitong paraan, kailangan mong sundin ang mga nakalistang hakbang sa ibaba:

  1. Una sa lahat, ideklara ang tagapagbuo bilang pribado.
  2. Pagkatapos ay kailangan mong lumikha ng isang pribadong static na halimbawa para sa klase na ito ngunit hindi mo pa kailangang i-instantiate ito pa.
  3. Panghuli, lumikha ng isang paraan ng pabrika na unang susuriin kung ang miyembro ng halimbawa ay null o hindi. Kung hindi pagkatapos ay lilikha ito ng isang halimbawa ng klase ng singleton para sa iyo at ibalik ito.

Ipinapakita ng code sa ibaba kung paano ito isagawa.

// Lazy Initialization public class LazySingleton {private static LazySingleton INSTANCE = null private LazySingleton () {} public static LazySingleton getInstance () {if (INSTANCE == null) {synchronised (LazySingleton.class) {INSTANCE = bagong LazySingleton ()}} ibalik ang INSTANCE}}

3. Ligtas na Singleton ng Thread Pamamaraan

Ngunit ang diskarte sa itaas ay maaaring magtaas ng ilang mga alalahanin sa kasabay na mga sitwasyon. Dahil ang singleton pattern ay pangunahing ginagamit sa mga multi-thread at kungmaramihang mga thread ang ipasok ang kung kundisyon sa parehong oras maaari itong itaas ang mga isyu. Upang maiwasan ito, susubukan naming lumikha ng isang ligtas na thread na klase ng singleton sa pamamagitan ng pagsasabay sa pangkalahatang pamamaraan sa pag-access. Tinitiyak nito na isang thread lamang ang nagpapatupad ng pamamaraang ito sa anumang punto ng oras. Sumangguni sa code sa ibaba upang makita ang pagpapatupad:

// Thread Safe Singleton public class ThreadSafeSingleton {pribadong static ThreadSafeSingleton INSTANCE pribadong ThreadSafeSingleton () {} pampublikong static na naka-synchronize na ThreadSafeSingleton getInstance () {kung (INSTANCE == null) {INSTANCE = bagong ThreadSafeSingleton ()} bumalik INSTANCE}}

Ngunit sa mga oras na ang diskarte na ito ay maaari ding maging napaka-abala sa bawat oras na pamamaraaninanyayahan kailangan nitong maghintay para sa lock upang mapalabas bago ito magamit ng pamamaraan. Nagreresulta ito sa pagbagal ng proseso at hahantong sa susunod na diskarte na iyonTamad na Pauna sa Double Lock.

4. Lazy Initialization na may Double Lock Pamamaraan

Sa pamamaraang ito, hindi namin sinasabay ang mga pamamaraan. Sa halip ay binabalot namin ang code ng paglikha ng bagay sa loob ng isang na-synchronize na bloke.Maaari mong sabihin na sa pamamagitan ng pag-check sa mga kandado ng thread muna, itobinabawasan ang bilang ng mga acquisition ng lock. Ang pamamaraang ito ay karaniwang nagreresulta sa pagpapalakas ng pagganap ng application. Suriin ang code sa ibaba upang makita kung paano ito tapos.

// Lazy Initialization with Double Lock public class LazyDoubleLockSingleton {private static LazyDoubleLockSingleton INSTANCE = null private LazyDoubleLockSingleton () {} public static LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {synchronized (LazyDoubleLockSingleton) null) {INSTANCE = bagong LazyDoubleLockSingleton ()}}} bumalik INSTANCE}}

5. Pamamaraan ng Load na Pag-load

Ang pamamaraang ito ay batay sa JSL (Pagtukoy sa Wika ng Java) at ayon dito maglo-load lamang ng mga static na kasapi ng data kapag kinakailangan ang mga ito. Kaya't kapag ang iyong klase ng singleton ay na-load sa JVM, walang halimbawa ang nilikha. Dagdag dito, sa panahon ng pagpapatupad ng programa, ang pandaigdigang pamamaraan ay tinawag nang sunud-sunod. Sa pamamaraang ito, hindi mo kailangang malinaw na i-synchronize ang static getInstance () upang mai-load at simulan. Ang static na miyembro ng klase ay tatawagin sa isang maayos na sunud-sunod na pamamaraan, ang natitirang mga kasabay na invocations ng pandaigdigang pamamaraan ay naibalik sa parehong pagkakasunud-sunod nang hindi kinakailangang isagawa ang overhead ng pagsabay.

Nasa ibaba ang code upang maisagawa ang pareho.

kung paano i-convert ang binary sa decimal sa java
// 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. Pamamaraan ng Inisyal na Simula ng Static

Ang pamamaraang ito ng paglikha ng isang singleton na klase sa Java aykatulad ng sabik na paraan ng pagsisimula. Ang pagkakaiba lamang ay ang halimbawa para sa klase na ito ay nilikha sa loob ng pagkakaroon ng static block pagpapaandar.

// Static Block Initialization public class StaticBlockSingleton {private static StaticBlockSingleton INSTANCE private StaticBlockSingleton () {} // exception handling sa loob ng static block static {subukan {INSTANCE = bagong StaticBlockSingleton ()} catch (Exception e) {magtapon ng bagong RuntimeException ('Exception na naganap habang lumilikha ng Singleton Class ')}} pampublikong static na StaticBlockSingleton getInstance () {return INSTANCE}}

Dinadala tayo nito sa pagtatapos ng artikulong ito sa klase ng Singleton sa Java. Kung nais mong malaman ang tungkol sa Java maaari kang sumangguni sa aming .

Ngayon na naintindihan mo kung ano ang isang klase ng Singleton sa Java, tingnan ang ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online na may isang network na higit sa 250,000 nasiyahan na mga nag-aaral na kumalat sa buong mundo. Ang kurso sa pagsasanay at sertipikasyon ng Java J2EE at SOA ng Edureka ay idinisenyo para sa mga mag-aaral at propesyonal na nais na maging isang Java Developer. Ang kurso ay dinisenyo upang bigyan ka ng isang panimula sa pag-program ng Java at sanayin ka para sa parehong core at advanced na mga konsepto ng Java kasama ang iba't ibang mga balangkas ng Java tulad ng Hibernate & Spring.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento ng artikulong 'Singleton Class in Java' na artikulo at babalikan ka namin sa lalong madaling panahon.