Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

Ez egy AI által fordított bejegyzés.

제이온

[Hatékony Java] 3. elem: Privát konstruktor vagy felsorolási típus használatával biztosítsd a szingletonságot

  • Írás nyelve: Koreai
  • Referencia ország: Minden ország country-flag

Válasszon nyelvet

  • Magyar
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी

A durumis AI által összefoglalt szöveg

  • A singleton egy olyan osztály, amelyből csak egyetlen példány hozható létre, és általában állapot nélküli objektumok vagy egyedi rendszerösszetevők létrehozására használják.
  • A singleton létrehozásának módszerei közé tartozik a nyilvános statikus tag, amely egy végső mező, a statikus gyármetódus szolgáltatása és a felsorolási típus használata. A felsorolási típus használata a legjobb módszer.
  • Ha egy singleton osztályt serializálunk, akkor meg kell valósítanunk a Serializable interfészt, minden példánymezőt átmenetiként kell megadni, és újra kell definiálni a readResolve() metódust.

Szingleton

A szingleton fogalma

A szingleton egy olyan osztály, amelynek csak egyetlen példányát lehet létrehozni. A szingletonok tipikus példái a státusz nélküli objektumok vagy az egyedi rendszerösszetevők. A szingleton osztályok azonban nehezen tesztelhetők, hacsak nem definiáljuk a típust interfészként és a megvalósítást különálló osztályként.


A szingleton létrehozásának módjai

public static taggal ellátott, final típusú tagváltozó


public class Elvis {

    public static final Elvis INSTANCE = new Elvis();

    private Elvis() {
    }

    public void speak() {
        System.out.println("elvis");
    }


A private konstruktor csak egyszer lesz meghívva az Elvis példány inicializálásakor, és garantálja, hogy az egyetlen példány az egész rendszerben. Azonban a private konstruktor meghívható az AccessibleObject.setAccessible() metódus használata révén is, ami egy reflection-alapú módosítást jelent. Ez a módosítás megakadályozható egy kivétel dobásával a második objektum létrehozásakor.


  • Előnyök
    • Nyilvánvalóvá teszi az API-n keresztül, hogy az adott osztály szingleton.
    • Tömör.


Statikus gyár metódus public static taggal

public class Elvis {

    private static final Elvis INSTANCE = new Elvis();

    private Elvis() {
    }

    public static Elvis getInstance() {
        return INSTANCE;
    }

    public void speak() {
        System.out.println("elvis");
    }


A reflectionen keresztüli módosítások kivételével ez a módszer is garantálja, hogy az egész rendszerben egyetlen példány lesz. Csak a tagváltozót private-ra változtattuk, és az objektum visszatérését statikus gyár metódusra helyeztük át.


  • Előnyök
    • Az API módosítása nélkül is lehetőség van a szingleton-tulajdonság megszüntetésére.
      • Például a statikus gyár metódus szálonként más példányt adhat vissza.
    • Lehetőség van generikus szingleton gyár metódusra való áttérésre.
    • A statikus gyár metódusának metódus referenciája használható szolgáltatóként.
      • Például az Elvis::getInstance helyett Supplier<Elvis> használható.


Ha nincs szükség a fenti előnyök kihasználására, akkor célszerű az első módszert használni.


Sorszámozott típus használata

public enum Elvis {

    INSTANCE;

    public void speak() {
        System.out.println("elvis");
    }


A legcélszerűbb módszer a sorszámozott típus használata. A fenti két módszerhez képest biztonságosabb a reflection támadásokkal szemben, és a kód is tisztább. Ezenkívül, ahogyan később kitérünk rá, a fenti két módszernek van egy hátránya: a sorosításkor további kódot kell hozzáadni.

Fontos azonban megjegyezni, hogy a létrehozni kívánt szingleton lehetővé teszi az interfész öröklését, de nem a szülőosztály öröklését.


Fontos tudnivalók a szingleton osztályok sorosításakor

Ha a fenti módszerek egyikével létrehozott szingleton osztályt szeretnénk sorosítani, akkor a Serializable interfész implementálása mellett minden példány tagváltozót transient-ként kell deklarálni, és a readResolve() metódust felül kell definiálni.


private Object readResolve throws ObjectStreamException {
    return INSTANCE;


Forrás

제이온
제이온
제이온
제이온
[Hatékony Java] 5. pont: Ne adja meg a forrásokat, hanem használjon függőségi injektálást Ha egy osztály külső erőforrásoktól függ, akkor kerülje a szinglettek és a statikus segédprogram-osztályok használatát. A függőségi injektálás segítségével javítható az osztály rugalmassága, újrafelhasználhatósága és tesztelhetősége, és a gyári módszer mi

2024. április 28.

[Hatékony Java] 4. elem: Ha meg szeretné akadályozni az instancíázást, használjon privát konstruktort A csak statikus metódusokat és mezőket tartalmazó segédprogram-osztályok esetében célszerű a konstruktort priváttá tenni, hogy megakadályozzák az instancíázást. Ez megakadályozza, hogy a felhasználók automatikusan generáltnak gondolják a konstruktort, és

2024. április 28.

[Hatékony Java] 6. pont: Kerülje a felesleges objektum létrehozását Útmutató a Java-ban a felesleges objektum létrehozásának minimalizálásához. A String, Boolean és egyéb immutabilis objektumok esetében célszerű literálokat használni, míg a reguláris kifejezéseknél a Pattern példányokat érdemes gyorsítótárazni. Emellett a

2024. április 28.

Koncepcionális adatmodellezés A koncepcionális adatmodellezés az entitások elkülönítésének és az entitások közötti kapcsolatok ERD-ként való ábrázolásának folyamata. Az entitások független információs egységek, az attribútumok pedig az entitások által birtokolt adatok. Az azonosítók e
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2024. április 8.

[Szinkronitás] Atomi művelet: Memória kerítés és memória sorrendezés Ez a bejegyzés bemutatja, hogyan kell figyelembe venni a memória sorrendet atomi műveletekben, és megmagyarázza a sorrendezési beállítások fontosságát. Bemutatja a Relaxed, Acquire, Release, AcqRel, SecCst és egyéb sorrendezési beállításokat, valamint rés
곽경직
곽경직
곽경직
곽경직
곽경직

2024. április 12.

Hogyan akadályozza meg a Rust a párhuzamosítási hibákat A Rust egy erőteljes nyelv, amely megoldja a párhuzamos programozás kihívásait. A típusrendszere és a tulajdonmodell biztosítja az adatok biztonságos átvitelét és megosztását a szálak között. A belső változtathatóság mintái, mint a Mutex, a Channel és az
곽경직
곽경직
곽경직
곽경직
곽경직

2024. március 28.

[Javascript] Az objektum szerkezete (V8) A JavaScript objektumok a V8 motorban a gyors módnak megfelelő szerkezetek szövegéhez optimalizálódnak, vagy szótár módként működnek hash-táblaként, a állapottól függően. A gyors mód gyors, de ha új kulcsot adnak hozzá, vagy elemet törölnek, a szótár módb
곽경직
곽경직
곽경직
곽경직
곽경직

2024. március 18.

[Fém anyagok műszerész mester gyakorlati vizsga] 33. kiadás megoldása A fémes anyagok kristályszerkezetéről, a perlit magképződés folyamatáról, a ferrit kristályméret mérésének módszeréről, az acél 5 fő eleméről és a mangán hatásáról, a megkeményedési törékenység elhárításának intézkedéseiről, a hőkezelési műveletek jellemz
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi

2024. április 23.

[Next.js] Futási időbeli környezeti változó befecskendezés Ismerje meg a Next.js-ben a build idő után beállított környezeti változók beállításának módját. A cikk bemutatja a cross-env telepítését és a szkriptek módosítását, amelyeket a Windows felhasználók is könnyen követhetnek. A helyi, a dev, a qa és a prod kö
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

2024. március 20.