JavaRush /Java Blog /Random-TK /Nagyşlar we Singleton - ilkinji gezek duşan her bir adam ...

Nagyşlar we Singleton - ilkinji gezek duşan her bir adam üçin

Toparda çap edildi
SingletonBu 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 Singletonderrew bir topar sorag ýüze çykýar: nagyş näme, näme üçin zerur, haýsy nagyş Singletonwe ahyrsoňy bu nähili ýalta durmuşa geçirmek. Jogap bermäge başlalyň: Nagyşlar we Singleton - ilkinji gezek duşan her bir adam üçin - 1

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.
Nagyşlar we Singleton - ilkinji gezek duşan her bir adam üçin - 2
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 Singletonnagyş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 we Singleton - ilkinji gezek duşan her bir adam üçin - 3
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:
Nagyşlar we Singleton - ilkinji gezek duşan her bir adam üçin - 4

Ahyrynda Singleton nagşy

Singletondö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:
  1. 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.

  2. 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):
Nagyşlar we Singleton - ilkinji gezek duşan her bir adam üçin - 5
Conditionagdaýy üns bilen okanyňyzdan soň, Singletonbu ý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. EarthProgrammadaky 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, Singletonkonstruktory 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; //#1
}
# 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(){} // #2
}
# 3 . - Singleton almak üçin ulanyljak statiki dörediş usulyny yglan ediň:
public class LazyInitializedSingleton {
    private static LazyInitializedSingleton instance;
        private LazyInitializedSingleton(){}
        public static LazyInitializedSingleton getInstance(){ // #3
        if(instance == null){		//if the object has not been created yet
            instance = new LazyInitializedSingleton();	//create a new object
        }
        return instance;		// return the previously created object
    }
}
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:
  1. Java Singleton dizaýn nusgasy Mysallar bilen iň oňat tejribe
  2. Dizaýn nagyşlary
  3. Java-da dogry Singleton
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION