[JAVA] Beispielcode für die Singleton-Implementierung mit enum

Einer der Java-Programmierklassiker, Effective Java, empfiehlt die Verwendung von "enum" zur Implementierung von Singleton ("Punkt 4: Erzwingen von Singleton-Eigenschaften mit einem privaten Konstruktor oder Aufzählungstyp"). Neulich hatte ich die Möglichkeit, Singleton mit "enum" in meiner Arbeit zu implementieren, daher möchte ich den Beispielcode behalten.

Singleton.java


public enum Singleton {
    
    /**Darf nicht von außerhalb der Klasse angerufen werden. */
    INSTANCE;
    
    private String field;
    
    /**
     *De-facto-Konstruktor.
     *Nur diese Methode sollte verwendet werden, um die Instanz abzurufen.
     * @Instanz zurückgeben
     */
    public static Singleton getInstance() {
        if (INSTANCE.field == null) {
            INSTANCE.field =  "field";
        }
        return INSTANCE;
    }

    public String getField() {
        return field;
    }

    public void setField(String field) {
        this.field = field;
    }
}

Main.java


public class Main {
    public static void main(String[] args) {
        Singleton instance1 = Singleton.getInstance();
        System.out.println(instance1.getField()); //=> field
        
        instance1.setField("changed field");
        
        //Es sieht so aus, als würde eine weitere Instanz erstellt.
        //Tatsächlich verwenden sie dieselbe Instanz.
        Singleton instance2 = Singleton.getInstance();
        System.out.println(instance2.getField()); //=> changed field
    }
}

Bei der Methode mit "class" sind insbesondere bei der parallelen Programmierung weitere Punkte zu beachten, und die Implementierung wird proportional kompliziert, aber mit "enum" ist es möglich, Singleton sehr einfach zu realisieren. Ich kann es schaffen Diese Verwendung weicht jedoch von der ursprünglichen Verwendung von "enum" ab - es scheint ein "Trick" zu sein, daher ist "Schnittstelle, die nur durch Implementierung zu einem Singleton wird" die Standardbibliothek. Ich wünschte, ich hätte es im nächsten Abschnitt (´ ・ ω ・ `)

Recommended Posts

Beispielcode für die Singleton-Implementierung mit enum
Beispielcode mit Minio aus Java
Minimaler Vorlagencode für die Android-Entwicklung, RecyclerView-Implementierung
Java-Beispielcode 02
Java-Beispielcode 03
[Java] Konvertieren Sie DB-Code mit enum in einen Codewert
Java-Beispielcode 04
Beispielcode für die Suche mit QBE (Query by Example) von Spring Data JPA
Java-Beispielcode 01
Beispielcode für die Protokollausgabe von Java + SLF4J + Logback
GUI-Beispiel mit JavaFX
Apache Beam Beispielcode
Implementieren einer Datenbank mit Realm
Erstellen Sie einen QR-Code für Google Authenticator mit ZXing in Java
Beispielcode für das grundlegende Verspotten und Testen mit Mockito 3 + JUnit 5