Ich glaube, jeder ist bereits mit dem Singleton -Modell vertraut, und seine Implementierungsmethoden sind normalerweise in die folgenden beiden Typen unterteilt:
Die Codekopie lautet wie folgt:
// Faule Implementierung
öffentliche Klasse Singleton {
private statische Singleton -Instanz = NULL;
private Singleton () {}
public static newinstance () {
if (null == Instanz) {
Instance = new Singleton ();
}
Rückkehrinstanz;
}
public void dosomething () {
// etwas mach ...
}
}
// hungriger chinesischer Stil
öffentliche Klasse Singleton {
private statische Singleton -Instanz = new Singleton ();
private Singleton () {}
public static singleton newinstance () {
Rückkehrinstanz;
}
public void dosomething () {
// etwas mach ...
}
}
In der Verwendung des Einzelinteressen-Modus hat der faule und hungrige Stil unterschiedliche Anwendungsszenarien. Um es zu verwenden.
In den beiden oben genannten Modi gibt es, wenn Sie Multi-Threaded sind Objekte, das ist, dass der Thread nicht sicher ist.
Gibt es also eine Möglichkeit, die einzelne Interessenmodus hungriger Faden-Safe im Man-Stil zu machen? Es gibt sicherlich Antworten. In vielen Fällen hat die JVM uns eine Synchronisationssteuerung zur Verfügung gestellt, wie z. B.:
a.
b.
Wenn der JVM die Klasse lädt, wird sichergestellt, dass die Daten synchronisiert sind.
Verwenden Sie interne Klassen auf Klassenebene, um Objektinstanzen in dieser internen Klasse zu erstellen. Solange Sie keine internen Klassen auf Klassenebene verwenden, erstellen Sie keine Objektinstanzen, wodurch fauler fauler Laden und Fadensicherheit erreicht werden.
Die Codekopie lautet wie folgt:
öffentliche Klasse Singleton {
// Innere Klasse wird das einfache Interessenobjekt nur erstellt, wenn die innere Klasse geladen wird
private statische Klasse Singletonholder {
öffentliches statisches Singleton Instance = new Singleton ();
}
private Singleton () {}
public static singleton newinstance () {
return Singletonholder.instance;
}
public void dosomething () {
// etwas mach
}
}
Dies kann das thread-sichere Einzelpreismodell realisieren.
Darüber hinaus können wir den Einzelinteressen-Modus über Aufzählungstypen implementieren, was ebenfalls eine empfohlene Weise ist.
Das Implementieren eines Singleton -Musters mit Enum -Typen ist wie folgt:
Die Codekopie lautet wie folgt:
public enum singleton {
// Definieren Sie ein aufgezählter Element, es ist eine Instanz von Singleton
Beispiel;
public void dosomething () {
// etwas mach ...
}
}
Ok, der Singleton -Modus wird hier eingeführt.