singleton minta

[Angol nyelvű cikk megtalálható itt].

Ezt a bejegyzést nyitok cikksorozatot tervezési minták. Minden Írtam alapja kizárólag személyes tapasztalat.

A tervezési minták - bemutatunk néhány felmerült problémák során az objektum-orientált tervezés, valamint módjaik (elméleti és gyakorlati). Más szóval - ezek csak példák a helyes megközelítés a problémák közös tervezési feladatokat.

Egy egyszerű végrehajtását Singleton

Az egyik legegyszerűbb módja, hogy hajtsák végre a Singleton minta Java néz ki:

Most adok némi magyarázattal a végrehajtás a sablont.

getInstance () módszer létre pontosan egy példányát a Singleton. Ezt a módszert bejelentett szinkronizálva. Ez úgy történt, jó okkal. A többszálú program, míg a módszer hívás getInstance () több patakok okozhatnak több példányban Singleton osztály. És ott lehet csak egy!

Szinkronakciókból módosítót lehet szüntetni. Ehhez meg kell inicializálni _instance:

és eljárás getInstance () eltávolítása konstrukció „ha”. Ezután inicializálás során fellépő osztály betöltése.

De a használatát lusta inicializálás (lusta inicializálás) előnyös, ha létre egy példánya a hosszú időt vesz igénybe. És abban az esetben, lusta inicializálás, lehetséges, hogy a helyzet kezelésére adódó isklyuchitalnye a kivitelező.

Singleton dupla ellenőrzött zár

A probléma a lusta inicializálás csak, hogy a szinkronizáció szükséges elvileg csak egyszer, hogy több patak nem szerepel a kritikus szakasz egyszerre. De létrehozása után egy osztály szinkronizáló fokon szeretnék megszabadulni.

A leggyakoribb módja, hogy megszabaduljon a felesleges szinkronizálása - a kettős ellenőrzés zár, ami így néz ki:

Singleton a Bíróság Holder

És itt egy másik figyelemre méltó megvalósítási módja az egységes sablon lusta inicializálása:

A tárgy indítja az első hívást a módszer getInstance (). Azaz, már át a problémát, szinkronizálás szintjén a osztálybetöltője (class loader).

De mi van, ha a kérelem több osztály Loader'ov vagy mi van egy elosztott rendszerben több Java virtualnmi gépeket? Akkor ez bonyolult. Megbeszéljük, hogy egy másik alkalommal.

Általánosságban elmondható, hogy most divatos azt mondani, nagyon jó változata a Singleton minta így néz ki:

Ez minden. Ó, igen! Miért van szükségünk rá.

Egy gyakorlati példa egyelem¶

Gyakran használják ezt a mintát, ha foglalkoznak a konfigurációt. Előfordul, hogy a konfigurációs program kényelmes tárolni egy fájlban. Tegyük fel, hogy ez egy egyszerű szöveges fájl „props.txt” egy sort, mint a „kulcs = érték”. Gondoskodnunk kell arról, hogy a konfiguráció a program egyedülálló. Másodszor, nem teremtette volna meg, de meg kell tennie, hogy betiltsák a felhasználói osztály. Így

Most a konfigurációs használhatja a fajta struktúra:

Ha a nevek a tulajdonságokat a „props.txt” nem változik, akkor lehet leírni őket egy osztályba, mint ez:

és a kapott értékeket a következőképpen:

Singleton minta nem csak hasznos, ha dolgozik konfigurációkat. Azt is fel lehet használni, ha írásban ConnectionPool, Factory és egyéb dolgok.

Most pontosan mindent.

Kapcsolódó cikkek