Gyakran tapasztalunk ilyen zavart a programozásban, egyes függvényeket singletonokkal, míg néhány függvényt statikus módszerekkel oldunk meg, tehát mik a statikus módszerek és singletonok elvei és használati forgatókönyvei? Tisztázzuk ma az ügyet.
1. Először nézzük meg a különbséget a statikus és a nem-statikus módszerek között?
Sok programozó megérti, hogy a statikus módszerek először betöltődnek, a nem-statikus módszerek később töltődnek be, a statikus módszerek mindig léteznek a memóriában, a nem-statikus módszerek pedig nem. Ezért ajánlott nem-statikus módszert alkalmazni. Először is, helytelen hangsúlyozni, hogy ez a megértés téves.
Először is, elemezzük memóriából: amikor az alkalmazás inicializálódik, a CLR (a CLR a Common Language Runtime) szintén egy futási idejű környezet, mint a Java virtuális gép, amely felelős az erőforrás-kezelésért (memória allokáció és szemétgyűjtés stb.), és biztosítja az alkalmazás és az operációs rendszer közötti szükséges elkülönítést. A CLR-nek két különböző fordítási neve van: a Common Language Runtime és a Common Language Runtime. Minden folyamathoz egy címteret rendel a folyamatban elérhető térben, amely a kezelt halom. A kezelt halom több régióra van osztva, amelyek közül a legfontosabb a hulladékgyűjtő halom (GC halom) és a töltőhalom (Loader Heap), amelyet objektumpéldányok tárolására használnak, és amelyet a GC kezel. A Loader Heap legfontosabb információi a MethodTable táblán keresztül a metaadatokkal kapcsolatos adatok, mint például az alaptípusok, statikus mezők, implementációs felületek és minden módszer. A Loader Heap nem fogadja el a GC irányítását, és az életciklusa a teremtéstől a pusztulásig tart. Más szóval, ha egy osztály betöltődik, az osztály statikus és nem-statikus módszerei is tárolódnak a Load Heap MethodTab táblájában, GC vezérlés nélkül, és mindegyik az első töltésnél a memóriában lakik.
Mi a különbség a statikus és a nem-statikus módszer között? A különbség az, hogy objektum létrehozásakor a statikus metódusnak csak másolata van, míg a nem statikus metódus minden új objektumhoz egy másolatot másolt az adott példányról szóló információt a GC Heap-re, és egyidejűleg az új objektumot a stackre helyezi. A stack mutató által mutatott cím az a memóriacím, amelyet épp most másoltak a GC Heap-re. Ezért a módszerhívás sebessége szempontjából a statikus módszerek gyorsabbak, mert a nem-statikus módszereket kell megvalósítani és memóriát kell osztani.
A programozás története szempontjából a korai strukturált programozás szinte minden módszere statikus módszer volt, és az instanciációs módszerek bevezetése objektumorientált programozás kérdése volt, így az instanciációs módszer nem a hatékonyság és a memória futtatásának problémájának megoldása volt. Célja, hogy a fejlesztés mintázatosabbá és objektumorientáltabbá tegye.
A fenti elemzésből levonható a következmény: 1. A statikus és a nem-statikus módszer a megoldásmód megkülönböztetése. 2. Ha öröklés, polimorfizmus vagy egy metódus nem kapcsolódik az osztály objektumához, akkor statikus metódust válassz, például eszközosztályt.
2. Mi a különbség az egy-egy mód és a statikus módszer között?
Néha mérnöki szinten kell fenntartanunk egy információt, például néhány konfigurációs attribútumot, amelyek futásidőben töltődnek, és amelyek az alkalmazás egész élete alatt fenn kell lenniük, nyilvánosak, így csak egy példány szükséges. Jelenleg fontolóra vesszük a singleton vagy statikus módszer használatát az adatok fenntartására, de ekkor az adatokat objektumorientált módon szerezzük meg, egy-egy módszert használunk.
Először is, a statikus módszerek osztályalapúak, az egyesek pedig objektum-alapúak. Ha a felbontás mintázata objektum-alapú, használjunk egy-egy megoldást, különben statikus megközelítést. Például az osztályokat örökölni, interfészeket implementálni, késleltetni az inicializációt, átírni az övosztályokat stb., hogy singletonokat használj, másodszor, a statikus módszerek folyamatorientáltak, a singletonok pedig objektumorientáltak. Harmadszor, a statikus attribútumváltozókat nem töröli a GC, így az egyesleges objektumokat nem töröli a GC, és a statikus metódusokban generált objektumok akkor szabadulnak fel, amikor a statikus metódust végrehajtják. |