Luovan suunnittelun malli: 1. Singletonin kuvio

Mikä on luova suunnittelumalli?

(26. joulukuuta 2020)

Luovan suunnittelun mallit käsittelevät luokan uusien objektien luomista tai kloonaamista. Kloonaus tapahtuu, kun samanlainen objekti on jo olemassa ja uuden objektin pikakäsittelyn sijaan kloonataan olemassa oleva.

Eri tapoja luoda objekteja vaikuttavat suuresti ongelman ratkaisuun. Eri kielet vaikuttavat siis siihen, mitä kuvioita on mahdollista käyttää.

Singleton-malli

Singleton-mallia käytetään, kun vaaditaan vain yhtä luokan esiintymää. Esimerkiksi DB-yhteyden muodostaminen sovelluksessa, tulostusjono tulostimien avulla, käyttäen kirjaimia, koska ne vaativat paljon resursseja. Kaikissa näissä tapauksissa, jos esiintymiä on useita, se aiheuttaa sekaannusta ja epäjohdonmukaisuutta.

Tätä mallia käytetään, kun ilmentymä on jaettu ja käytettävissä kaikkialla sovelluksessa. Varmista, että jaettujen resurssien käyttö on säiettä turvallista, on yksi erittäin hyvä esimerkki siitä, missä tällainen kuvio voi olla elintärkeää. Singleton-mallin tarkoituksena on tarjota maailmanlaajuinen pääsy luokalle, joka on rajoitettu yhteen ilmentymään.

Katsotaan, miten objekti luodaan

public class DummyClass{ DummyClass(){}
}DummyClass dc = new DummyClass(); //every time when this line is called a new object of DummyClass is created

Aina kun tarvitaan DummyClass-objektia, sen konstruktori kutsutaan ja objekti luodaan. Tätä kutsutaan innokkaaksi alustukseksi.

Mutta yksinkertaisessa mallissa vaaditaan vain yksi luokan esiintymä. Jos DB-yhteys on jo määritetty, meidän ei tarvitse luoda uutta tietokantayhteyttä, vaan meidän on käytettävä jo olemassa olevaa yhteyttä. Katsotaanpa, miten se saavutetaan.

Tässä olemme rajoittaneet rakentajan laajuuden itse luokkaan. Joten tämän luokan objektin luomiseksi on kutsuttava luokan staattinen getDBConnection () -metodi. Sitten se tarkistaa, onko dbConnection-objekti tyhjä, luo sitten uuden yhteysobjektin ja palauttaa muuten palauttamalla olemassa olevan yhteysobjektin.

Tämä esimerkki osoittaa laiska alustus . Tämä tarkoittaa, että emme luo luokan objektia, ellei sitä todella tarvita. Siksi tämä ohjelma on tehokkaampi resurssien suhteen.

Singletonin suunnitteluperiaatteella on kompromisseja. Jos käynnissä on useita tietokonelankoja, ketjut voivat yrittää käyttää jaettua yksittäistä objektia.

Yllä olevan toteutuksen ongelmat

Nyt on mahdollista, että kaksi ketjut samaan aikaan kutsuvat getDBConnection-menetelmää, eikä objektia ole vielä luotu. Molemmille säikeille dbConnection-objekti on nolla ja molemmat yrittävät luoda uuden ilmentymän ja käyttää sitä sen sijaan. Siksi on erittäin tärkeää varmistaa, että yksi ketju pääsee getDBConnection-yhteyteen kerrallaan, jotta useita instansseja ei luoda.

-säie saavutetaan -safe singleton-luokan on tehtävä yleinen käyttömenetelmä synkronoitavaksi, jotta vain yksi ketju voi suorittaa tämän menetelmän kerrallaan.

Tähän synkronoituun koodilohkoon voi käyttää vain yksi ketju kerrallaan

Saatat ajatella, että ongelma on ratkaistu nyt. Mutta valitettavasti ei! Yksittäisominaisuuden pakottamiseksi asetimme lukon staattiseen getDBConnection-menetelmään, mutta vaarantamme samalla sen suorituskyvyn. Kun objekti on jo luotu, myös useiden ketjujen on odotettava saadakseen kyseisen objektin olemassa olevan esiintymän. Voimmeko tehdä jotain parempaa? Katsotaanpa.

Koska on ilmeistä, lukitus vaaditaan vain, kun ilmentymä on tyhjä, jotta eri ketjut eivät luo useita esiintymiä. Joten voimme laittaa synkronoidun ehdon if-ehdon sisään, jossa tarkistamme, onko ilmentymä nolla vai ei, ja lisätä kaksinkertaisen tarkistuksen useiden instanssien skenaarioiden poistamiseksi. / div>

Todellisessa käytössä singleton-malli voidaan toteuttaa eri tavoin. Se vain määrittelee perustavan tarkoituksen, jota tämä malli palvelee, mutta koodin toteutus voi olla erilainen.

Se on kaikki puoleltani. Toivon, että nyt on selvää, missä, milloin ja miten singletonin suunnittelukuviota käytetään. Saat lisätietoja ymmärtämisestä kirjasta, Gang of Fourin suunnittelumalliluettelosta.

Ilmoita minulle alla olevissa kommenteissa, jos sinulla on epäilyksiä. Jos pidät tästä blogista, jaa se ystävillesi. Hyvää ohjelmistosuunnittelua!

Osa 2: