Teknologian jakaminen

Yksittäisen kuvion toteutus

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Esittely

1.1 Tausta

Kun sovelluksen on ohjattava resurssien jakamista, suoritettava konfiguraatioiden hallintaa ja lokin tallennustoimintoja, yleinen vaatimus on käyttää yleistä tukiasemaa, jotta ohjelma voi käyttää sitä tämän yleisen tukiaseman kautta riippumatta siitä, missä se on asiaankuuluvat tapaustiedot. Tämän tarpeen täyttämiseksi voimme käyttää Singleton Pattern -mallia. Yksittäinen malli varmistaa, että luokassa on vain yksi ilmentymä, ja tarjoaa maailmanlaajuisen yhteyspisteen kyseisen ilmentymän käyttämiseksi.

Erityisesti singleton-malli tarjoaa yleensä staattisen menetelmän (kuten getInstance()), joka palauttaa luokan ainoan esiintymän. Koska tämä menetelmä on staattinen, sitä voidaan kutsua luomatta luokan esiintymää. Tämä tarkoittaa, että mikä tahansa koodi, jolla on pääsy luokkaan, voi saada yksittäistapauksen kutsumalla tätä staattista menetelmää.

1.2 Tarkoitus

Tässä artikkelissa esitellään yksityiskohtaisesti singleton-mallin peruskäsitteet ja toteutusvaiheet. Tämän artikkelin avulla voit ymmärtää, kuinka singleton-kuvio toimii, ja oppia käyttämään sitä tehokkaasti todellisissa projekteissa.

2. Mikä on singleton-kuvio?

Mielenkiintoisen esimerkin vuoksi singleton-malli on kuin päähenkilön sädekehä animemaailmassa riippumatta siitä, miten juoni kehittyy, päähenkilöitä on aina vain yksi, ja kaikki tietävät, että hän on tarinan ydin. Näin tarinan etenemisestä riippumatta jokainen voi löytää saman henkilön viemään juonen eteenpäin.

2.1 Singleton Patternin edut ja haitat

etu

Varmista yksittäinen esiintymä: Vältä kaksoiskappaleiden luomista ja säästä resursseja.
globaali tukiasema: Kätevä maailmanlaajuinen pääsy ja yksinkertaistettu puhelu.
Laiska alustus: Luo ilmentymiä pyynnöstä parantaaksesi suorituskykyä.

puute

Vaikea skaalata: Singleton-luokkia on usein vaikea laajentaa, koska rakentaja on yksityinen.
mahdollisia suorituskykyongelmia: Korkean samanaikaisuuden ympäristössä joissakin toteutuksissa voi olla suorituskykyongelmia.
Vaikeus testauksessa: Yksittäinen malli voi tehdä testaamisesta vaikeaa, koska se on globaali tila.

2.2 Yksittäisen tilan käyttöskenaariot

Singleton-kuvion ominaisuuksien mukaan sen käyttöskenaariot voidaan jakaa seuraaviin luokkiin:

  • Esimerkiksi resurssien jakamisen tapauksessa konfigurointitiedoston tiedot ja lokitiedostot voidaan sijoittaa tiedostoon. Nämä konfigurointitiedot tai lokitiedostot luetaan yhtenäisesti yksittäisen objektin toimesta, ja sitten muut palveluprosessin objektit ohittavat tämän singleton. Objektit hankkivat nämä määritystiedot, mikä voi yksinkertaistaa kokoonpanon hallintaa monimutkaisissa ympäristöissä.
  • Kun kyseessä ovat resurssien, kuten säieryhmien, ohjaaminen, monisäikeisten säieryhmien suunnittelussa käytetään yleensä yksisäikeistä tilaa ryhmän säikeiden hallinnan helpottamiseksi.

3. Yksittäisen tilan toteutustapa

Yksittäisen kuvion toteutus sisältää yleensä kolme elementtiä:

  1. yksityinen rakentaja, tee luokan rakentajasta yksityinen, jotta ulkopuolinen ei voi luoda ilmentymää uudella avainsanalla.
  2. Yksityiset staattiset viitepisteet omaan ilmentymään, luo staattinen ilmentymämuuttuja luokan sisällä tallentaaksesi yksilöllisen ilmentymän.
  3. Julkiset staattiset menetelmät, jotka palauttavat oman ilmentymän, tarjoavat staattisen menetelmän, jotta ulkomaailma voi saada ainoan esiintymän tällä menetelmällä.

3.1 Hungry Chinese Singleton Pattern

Hungry-tyylisessä singleton-tilassa singleton-ilmentymä muodostetaan, kun luokka ladataan, mikä on säikeen turvallista, koska luokkaa ladattaessa on luotu staattinen objekti ja vastenopeus on nopea kutsuttaessa. Haittapuoli on myös ilmeinen. Resurssitehokkuus ei ole korkea Niin kauan kuin luokan muita staattisia menetelmiä suoritetaan tai luokka on ladattu, tämä esiintymä alustetaan.

/**    
 * 饿汉单例模式:在还没有实例化的时候就初始化
 */
public class Hungry {    
  	//1. 开始时就创建实例
	private static final Hungry instance=new Hungry();
	
	// 2. 私有化的构造方法
	private void hungry() {  
	}
	
	public static Hungry getInstance() { 
		// 返回单例名
		return instance;  		
	}
}