Heim  >  Artikel  >  Java  >  Implementierungsmethoden und allgemeine Schreibmethoden des Java-Singleton-Musters

Implementierungsmethoden und allgemeine Schreibmethoden des Java-Singleton-Musters

PHPz
PHPznach vorne
2023-04-27 16:19:071437Durchsuche

1. Der Hungry-Modus wird auch als Vorlademodus bezeichnet. Er erstellt und initialisiert direkt ein Singleton-Objekt, sodass es keine Thread-Sicherheitsprobleme gibt. Es basiert auf dem ClassLoader-Klassenmechanismus und wird nur einmal geladen, wenn das Programm startet, sodass kein Thread-Sicherheitsproblem besteht.

Der Implementierungscode lautet wie folgt:

public class Singleton {
    // 1.防止外部直接 new 对象破坏单例模式
    private Singleton() {}
    // 2.通过私有变量保存单例对象
    private static Singleton instance = new Singleton();
    // 3.提供公共获取单例对象的方法
    public static Singleton getInstance() {
        return instance;
    }
}

Vorteile: Einfache Implementierung, keine Thread-Sicherheitsprobleme.

Nachteil: Das Objekt wird beim Laden der Klasse erstellt. Wenn es nach der Erstellung nicht verwendet wird, führt dies zu einer Verschwendung von Ressourcen. 2. Der Lazy-Modus und der Hungrig-Modus sind genau das Gegenteil. Der sogenannte Lazy-Loading-Modus bedeutet, dass er nur bei der ersten Verwendung initialisiert wird

Der Implementierungscode lautet wie folgt:

public class Singleton {
    // 1.防止外部直接 new 对象破坏单例模式
    private Singleton() {}
    // 2.通过私有变量保存单例对象
    private static volatile Singleton instance = null;
    // 3.提供公共获取单例对象的方法
    public static Singleton getInstance() {
        if (instance == null) { // 第一次效验
            synchronized (Singleton.class) {
                if (instance == null) { // 第二次效验
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

Der Lazy-Modus verwendet doppelte Validierungssperren und Volatilität, um die Thread-Sicherheit zu gewährleisten. Wie aus dem obigen Code ersichtlich ist, ist es egal, ob es sich um den Hungrig-Modus oder den Lazy-Modus handelt Implementierung Die Schritte sind die gleichen:

Erstellen Sie einen privaten Konstruktor, um zu verhindern, dass andere Aufrufe neue Objekte direkt verwenden, sodass das erstellte Objekt kein Singleton-Objekt ist.

Erstellen Sie eine private Variable, um das Singleton-Objekt zu speichern.
  • Stellen Sie eine öffentliche Methode bereit, um ein Singleton-Objekt zurückzugeben.
  • Im Vergleich zum Hungrigen Modus verursacht der Lazy Modus keine Ressourcenverschwendung, aber die Schreibmethode ist komplizierter.
  • 3. Statische innere Klasse

  • Statische innere Klasse kann sowohl Thread-Sicherheit als auch verzögertes Laden gewährleisten. Sie lädt und initialisiert die interne statische Klasse nur über den ClassLoader-Mechanismus, sodass es sich um einen Thread handelt Der Implementierungscode dieses Modus lautet wie folgt:
public class Singleton {
    // 1.防止外部直接 new 对象破坏单例模式
    private Singleton() {
    }
    // 2.静态内部类
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    // 3.提供公共获取单例对象的方法
    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

4. Enumeration

Die Enumeration wird von der Java Virtual Machine nur geladen und initialisiert, wenn sie zum ersten Mal verwendet wird, daher ist sie auch Thread-sicher und Lazy Beim Laden

lautet der Implementierungscode wie folgt:

public enum  EnumSingleton {
    INSTANCE;
    public EnumSingleton getInstance(){
        return INSTANCE;
    }
}

Das obige ist der detaillierte Inhalt vonImplementierungsmethoden und allgemeine Schreibmethoden des Java-Singleton-Musters. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen