Singleton
Bu makala nagyş düşünjesine ilkinji gezek duş gelen, e hakda eşiden ýa-da haýsydyr bir usul bilen döredilen, ýöne henizem hiç zada düşünmediklere gönükdirilendir . Hoş geldiňiz! JavaRush okuwçylary ilkinji gezek 15-nji derejedäki nagyşlara duş gelýärler, garaşylmadyk ýagdaýda şlýapa
Singleton
ýalta ýerine ýetiriş bilen “düzeltmegi” we durmuşa geçirmegi haýyş edýär. Bu hakda ilkinji gezek eşiden okuwçylarda
Singleton
derrew bir topar sorag ýüze çykýar: nagyş näme, näme üçin zerur, haýsy nagyş
Singleton
we ahyrsoňy bu nähili ýalta durmuşa geçirmek. Jogap bermäge başlalyň:
Her niçigem bolsa nagyş näme?
Has gowy düşünmek üçin bu soraga taryhdan jogap bermäge mynasyp diýip pikir edýärin. Programmistleriň arasynda şeýle meşhur dört ýazyjy bar: Erih Gamma, Riçard Helm, Ralf Jonson we Jon Wlissides, gyzykly bir pikiri öňe sürdi.
Programmalar ýazylanda köplenç takmynan şol bir meseleleri çözmelidigini we gurluşda şol bir görnüşdäki kody ýazmalydyklaryna göz ýetirdiler. Şonuň üçin köplenç obýekte gönükdirilen programmirlemekde ulanylýan adaty nagyşlar görnüşinde suratlandyrmagy makul bildiler. Kitap 1995-nji ýylda
“Obýekte gönükdirilen dizaýn usullary” ady bilen neşir edildi. Dizaýn nagyşlary " . Kitabyň ady gaty uzyn bolup, diňe
Dört toparyň kitaby diýlip atlandyryldy . Birinji neşirde 23 nagyş neşir edildi, şondan soň onlarça adam tapyldy.
Şeýlelik bilen, “Nusgalar näme?” Diýen abzasdaky soraga jogap bereliň , diňe birnäçe söz bilen jemläliň:
Bir nagyş, umumy meseläniň standartlaşdyrylan çözgüdi. |
Bu
Singleton
nagyşlaryň diňe biri.
Näme üçin bize nagyşlar (dizaýn nagyşlary) gerek?
Nusgalary bilmän programma edip bilersiňiz, muny JavaRush-da 15-nji derejä çenli ýüzlerçe kiçi programma ýazandygyna göz ýetirip, barlygy barada hiç zat bilmän tassyklap bilersiňiz. Bu, bir nagyşyň ussany höwesjeňden tapawutlandyrýan guralyň bir görnüşidigini görkezýär:
Nagyşlar adaty meseleleriň birini nädip dogry çözmelidigini düşündirýär. Netijede, nagyşlary bilmek wagtyňyzy tygşytlaýar. Algoritmler bilen meňzeşlik edip bolýar.
Mysal üçin, blackjack we sanlar bilen öz sortlaşdyryş algoritmiňizi düzüp , oňa köp wagt sarp edip bilersiňiz, ýa-da öňden bäri beýan edilen birini ulanyp, durmuşa geçirip bilersiňiz. Nagyşlar bilen hem edil şonuň ýaly. Mundan başga-da, nagyşlary ulanmak bilen kod has standartlaşdyrylýar we dogry nagyşlary ulananyňyzda ýalňyşlyk goýbermek ähtimallygyňyz az bolar, sebäbi olar öňem göz öňünde tutulypdy we bu nagyşda ýok edilipdi. Mundan başga-da, hemme zat, nagyşlary bilmek programmistlere biri-birine has gowy düşünmäge mümkinçilik berýär. Simplyönekeý şablonyň adyny aýtmak, beýleki programmistleriňize näme etmek isleýändigiňizi düşündirmäge synanyşmagyň ýerine ýeterlikdir.
Şeýlelik bilen, jemlemek üçin dizaýn nagyşlary kömek edýär:
- tekeri täzeden dikeltmäň, ýöne adaty çözgütleri ulanyň;
- kody standartlaşdyrmak;
- terminologiýany standartlaşdyrmak;
|
Bu bölümiň ahyrynda nagyşlaryň dürli görnüşlerini üç sany uly topara bölüp boljakdygyny belläp geçýäris:
Ahyrynda Singleton nagşy
Singleton
dörediji nagyşlara degişlidir . Göçme manyda terjimesi ýalňyz. Bu nagyş, synpyň diňe bir obýektiniň (synpyň bir mysaly) bolmagyny we şol obýekte global giriş nokadynyň berilmegini üpjün edýär. Bu nagşyň iki ýagdaýda ulanylmalydygy düşündirişden düşnükli bolmaly:
- programmaňyzda haýsydyr bir synpdan köp obýekt döredilmeli däl. Mysal üçin, kompýuter oýnunda “Nyşan” synpy bar we bu synpda gahrymanyň özüni suratlandyrýan ýekeje obýekt bolmaly.
- synp obýektine global giriş nokadyny üpjün etmeli bolanyňyzda. Başgaça aýdylanda, programmanyň islendik ýerinden obýektiň çagyrylýandygyna göz ýetirmeli. Gynansak-da, munuň üçin diňe global üýtgeýjini döretmek ýeterlik däl, sebäbi ýazuwdan goralmaýar we her kim bu üýtgeýjiniň bahasyny üýtgedip biler we obýekte global giriş nokady ýitiriler. Bu häsiýetler
Singleton
, mysal üçin, maglumatlar bazasy bilen işleýän synp obýektiňiz bar bolsa we programmanyň dürli ýerlerinden elýeterli bolmagy üçin maglumatlar bazasy zerur. Şeýle hem Singleton
, synpyň ozal döredilen mysalyny başga hiç bir kod çalşyp bilmez.
Bu iki mesele çözülýär
Singleton
: programmada diňe bir obýekt bolmaly we oňa global giriş bolmaly. 15-nji derejedäki mysalda, gapak aşakdaky iş üçin bu nagşy durmuşa geçirmegi soraýar (ine, onuň beýany):
Conditionagdaýy üns bilen okanyňyzdan soň,
Singleton
bu ýerde takyk (leeke) näme üçin zerurdygy belli bolýar. Galyberse-de, programma her synpdan bir obýekt döretmegiňizi soraýar:
Sun
,,
Moon
.
Earth
Programmadaky her bir synpyň birden köp Gün / Aý / Earther döretmeli däldigini çaklamak mantykly, ýogsam, “Wyldyz söweşleri” atly öz wersiýaňyzy ýazmasaňyz, manysyz bolar.
Üç ädimde Java ýerine ýetirişSingleton
aýratynlygy Java-da Singleton häsiýetini adaty konstruktor ulanyp amala aşyryp bolmaýar, sebäbi konstruktor hemişe täze bir obýekti yzyna gaýtaryp berýär. Şol sebäpden,
Singleton
konstruktory gizlemek we bir obýektiň barlygyny gözegçilikde saklaýan we täze ýüze çykýan zatlaryň hemmesini “ýok etmek” üçin umumy statiki usul döretmek. Eger
Singleton
'a' diýilse, ýa-da täze bir obýekt döretmeli (bu programmada ýok bolsa) ýa-da eýýäm döredilen zady yzyna gaýtarmaly. Munuň üçin:
# 1. - singleeke obýekti öz içine alýan synpa hususy statiki meýdan goşmaly:
public class LazyInitializedSingleton {
private static LazyInitializedSingleton instance;
}
# 2. - Synp konstruktoryny (deslapky konstruktor) şahsy ediň (oňa giriş synpyň daşynda ýapyk bolar, soň täze zatlary yzyna gaýtaryp bilmez):
public class LazyInitializedSingleton {
private static LazyInitializedSingleton instance;
private LazyInitializedSingleton(){}
}
# 3 . - Singleton almak üçin ulanyljak statiki dörediş usulyny yglan ediň:
public class LazyInitializedSingleton {
private static LazyInitializedSingleton instance;
private LazyInitializedSingleton(){}
public static LazyInitializedSingleton getInstance(){
if(instance == null){
instance = new LazyInitializedSingleton();
}
return instance;
}
}
Aboveokardaky mysal birneme manysyz, sebäbi diňe konstruktory gizleýäris we adaty konstruktoryň ýerine öz usulymyzy hödürleýäris. Bu makala JavaRush okuwçylaryna bu nagyş (we umuman nagyşlar) bilen ilkinji gezek aragatnaşyk saklamaga mümkinçilik berýändigi sebäpli, has çylşyrymly “Singletons” -yň durmuşa geçiriş aýratynlyklary bu ýerde berilmez. Diňe programmanyň çylşyrymlylygyna baglylykda bu nagşyň has jikme-jik takyklanmagynyň zerur bolup biljekdigini belläris. Mysal üçin, köp sapakly gurşawda (Sapaklar mowzugyna serediň) birnäçe dürli sapak bir wagtyň özünde Singletonyň getter usulyna jaň edip biler we ýokarda beýan edilen kod işlemegini bes eder, sebäbi her bir sapak synpyň birnäçe mysallaryny döredip biler. bir gezekde. Şol sebäpden, “Thread-safe” aýdymlaryny dogry döretmek üçin birnäçe dürli çemeleşme bar. That'söne bu başga bir hekaýa =)
Netijede. Şapkanyň soraýan ýalta başlangyjy näme ? Lazy başlangyç, ýalta başlangyç diýilýär. Bu, programmirleme usuly bolup, onda deslapky däl-de, islege görä resurs talap edýän amal (we obýekt döretmek serişde talap edýän amaldyr). Esasan kodumyzda näme bolýar
Singleton
. Başga bir söz bilen aýdylanda, obýektimiz öňünden däl-de, elýeterli pursatda döredilýär. Yalta başlangyç düşünjesiniň haýsydyr bir derejede
Singleton
“om” bilen berk baglanyşyklydygyny çaklamaly däldir. Yalta başlangyç beýleki döredijilik dizaýn nagyşlarynda-da ulanylýar, mysal üçin Proksi we Zawod usuly, ýöne bu başga bir hekaýa =)
Makalany taýýarlamakda aşakdaky çeşmeler ulanyldy:
- Java Singleton dizaýn nusgasy Mysallar bilen iň oňat tejribe
- Dizaýn nagyşlary
- Java-da dogry Singleton
GO TO FULL VERSION