Mums bieži ir šāda neskaidrība programmēšanā, dažas funkcijas tiek atrisinātas, izmantojot singletonus, un dažas funkcijas tiek atrisinātas, izmantojot statiskās metodes, tātad kādi ir statisko metožu un singletonu principi un lietošanas scenāriji? Šodien paskaidrosim šo jautājumu.
1. Vispirms apskatīsim atšķirību starp statiskajām metodēm un nestatiskajām metodēm?
Daudziem programmētājiem ir šī izpratne, ka statiskās metodes ielādējas vispirms, nestatiskās metodes ielādējas vēlāk, statiskās metodes vienmēr pastāvēs atmiņā, un nestatiskās metodes nebūs. Tāpēc ieteicams izmantot nestatisku metodi. Pirmkārt, ir nepareizi uzsvērt, ka šī izpratne ir nepareiza.
Pirmkārt, analizēsim no atmiņas, kad lietojumprogramma ir inicializēta, CLR (CLR ir Common Language Runtime) ir arī izpildlaika vide, piemēram, Java virtuālā mašīna, kas ir atbildīga par resursu pārvaldību (atmiņas piešķiršanu un atkritumu savākšanu utt.) un nodrošina nepieciešamo atdalīšanu starp lietojumprogrammu un pamatā esošo operētājsistēmu. CLR ir divi dažādi tulkojumu nosaukumi: Common Language Runtime un Common Language Runtime. Katram procesam piešķir adrešu telpu procesa pieejamā vietā, kas ir pārvaldītā kaudze. Pārvaldītā kaudze ir sadalīta vairākos reģionos, no kuriem vissvarīgākie ir atkritumu savākšanas kaudze (GC Heap) un iekrāvēja kaudze (Loader Heap), ko izmanto objektu instanču glabāšanai un pārvalda GC. Vissvarīgākā informācija, ko Loader Heap glabā tabulā MethodTable, ir ar metadatiem saistīta informācija, piemēram, bāzes tipi, statiskie lauki, ieviešanas interfeisi un visas metodes. Loader Heap nepieņem GC kontroli, un tā dzīves cikls ir no radīšanas līdz iznīcināšanai. Citiem vārdiem sakot, tiklīdz klase ir ielādēta, gan statiskas, gan nestatiskas šīs klases metodes tiek glabātas Load Heap tabulā MethodTab bez GC kontroles, un tās visas atrodas atmiņā pirmajai slodzei.
Kāda ir atšķirība starp statisko metodi un nestatisko metodi? Atšķirība ir tāda, ka, veidojot objektu, statiskajai metodei ir tikai kopija, savukārt nestatiskā metode kopēs informācijas kopiju par šo instanci GC kaudzē katram jaunam objektam un tajā pašā laikā ievietos jauno objektu kaudzē. Adrese, uz kuru norāda steka rādītājs, ir atmiņas adrese, kas tikko tika kopēta GC kaudzē. Tāpēc, runājot par metodes izsaukuma ātrumu, statiskās metodes ir ātrākas, jo nestatiskās metodes ir jāinstancē un jāpiešķir atmiņa.
No programmēšanas vēstures viedokļa gandrīz visas agrīnās strukturētās programmēšanas metodes bija statiskas metodes, un instantiācijas metožu ieviešana bija objektorientētas programmēšanas jautājums, tāpēc instantiācijas metode nebija paredzēta, lai atrisinātu darbības efektivitātes un atmiņas problēmu. Tas ir padarīt attīstību modelētāku un objektorientētāku.
No iepriekš minētās analīzes var izdarīt secinājumu: 1. Statiskā metode un nestatiskā metode ir atšķirība starp risinājuma režīmu. 2. Ja mantojumam, polimorfismam vai metodei nav nekāda sakara ar tās klases objektu, jāizvēlas statiska metode, piemēram, rīku klase.
2. Kāda ir atšķirība starp singletona režīmu un statisko metodi?
Dažreiz mums ir jāuztur informācija inženierzinātnēs, piemēram, daži konfigurācijas atribūti, kas tiek ielādēti izpildlaikā, kuriem jābūt visā lietojumprogrammas darbības laikā un ir publiski, tāpēc ir nepieciešama tikai viena kopija. Šajā laikā mēs apsvērsim iespēju izmantot singletonu vai statisku metodi, lai saglabātu šos datus, bet šobrīd šie dati tiek iegūti objektorientētā veidā, mēs izmantosim singletonu.
Pirmkārt, statiskās metodes ir balstītas uz klasēm, un singletons ir balstīts uz objektiem. Ja izšķirtspējas modelis ir balstīts uz objektu, izmantojiet singletonu, pretējā gadījumā izmantojiet statisku pieeju. Piemēram, jums ir jāmanto klases, jāievieš saskarnes, jāaizkavē inicializācija, jāpārraksta vecāku klases utt., lai izmantotu singletonus, otrkārt, statiskās metodes ir orientētas uz procesu, un singletons ir orientēts uz objektu. Treškārt, statiskie atribūta mainīgie netiks notīrīti ar GC, tāpēc GC nenotīrīs singleton objektus, un objekti, kas ģenerēti statiskajās metodēs, tiks atbrīvoti, kad tiek izpildīta statiskā metode. |