Heim  >  Artikel  >  Java  >  Was ist ein Java-Singleton-Muster?

Was ist ein Java-Singleton-Muster?

王林
王林Original
2019-11-11 14:37:152726Durchsuche

Was ist ein Java-Singleton-Muster?

Was ist das Singleton-Muster?

Das Singleton-Muster ist ein gängiges Entwurfsmuster, das sicherstellt, dass Instanzen einer Klasse Singletons sind.

Vorteile des Singleton-Modus:

(1) Zunächst müssen Speicherressourcen gespart werden, unabhängig davon, wie häufig Instanzen durch exponierte Methoden erstellt werden Es wird garantiert, dass das Objekt das gleiche Instanzobjekt im Systemspeicher ist. (2) Flexibilität: Da die Erstellung aller Instanzen von dieser Klasse gesteuert wird, kann diese Klasse den Instanziierungsprozess flexibel ändern.

(3) Kontrollierter Zugriff auf Instanzen, Singleton-Klassen können den kontrollierten Zugriff auf eindeutige Instanzen leicht steuern;

Nachteile des Singleton-Modus:

(1 ) Der Singleton-Modus hat keine Schnittstelle und ist nicht einfach zu erweitern. (2) Sie können den Reflexionsmodus nicht zum Erstellen eines Singletons verwenden, da sonst ein neues Objekt instanziiert wird. Verwenden Sie Lazy Singleton. Achten Sie bei der Verwendung des Beispielmodus auf Thread-Sicherheitsprobleme.

Möglichkeiten zur Implementierung des Singleton-Modus:

Hungry-Singleton-Methode

package index;
public class Superman {
    //空的构造器
    private Superman(){}
    
    //实例化对象
    private static Superman supermanInstance = new Superman();
    
    //获取实例化对象的静态函数getSupermanInstance()
    public static Superman getSupermanInstance(){
        return supermanInstance;
    }
}

Der Singleton ist im Voraus neu, wenn die Klasse geladen wird, und ein SupermanInstance-Objekt wird zu Beginn instanziiert. Unabhängig davon, ob Ihr Programm dieses Objekt aufrufen muss oder nicht, ist es bereits vorhanden Keine Verzögerung beim Laden. Um die Programmlast zu reduzieren, ist in den meisten Fällen ein verzögertes Laden erforderlich. Daher ist diese Art der Implementierung eines Singletons nicht die beste Wahl.


Lazy Singleton-Methode (Single-Threaded-Schreiben)

package index;
public class Superman {
    //空的构造器
    private Superman(){}

    //实例化对象;只声明 不使用new进行实例化
    private static Superman supermanInstance = null;

    //获取实例化对象的静态函数getSupermanInstance()
    public static Superman getSupermanInstance(){
        if(supermanInstance==null){ //如果为null的情况再进行实例化
            supermanInstance = new Superman();
        }
        return  supermanInstance;
    }
}

Deklarieren Sie ein Objekt, ohne es zu instanziieren, und rufen Sie die statische Factory auf, wenn das Programm es instanziieren muss Methode getSupermanInstance(), das deklarierte Objekt wird in der Methode beurteilt und instanziiert, wenn es null ist. Diese Schreibmethode kann den Effekt eines verzögerten Ladens erzielen, ist jedoch nicht threadsicher. Threading Gleichzeitig kann der Aufruf der statischen Factory-Methode getSupermanInstance() wiederholt Instanzen dieser Klasse erstellen und die Einzigartigkeit des Singletons zerstören

Empfohlenes Tutorial: Java-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist ein Java-Singleton-Muster?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn