Definition: Die Hauptfunktion des Singleton -Musters besteht darin, sicherzustellen, dass in Java -Anwendungen nur eine Instanz einer Klasse existiert.
In vielen Vorgängen, z. B. der Erstellung einer Verzeichnisdatenbankverbindung, ist ein solcher Einsatzbetrieb erforderlich.
Außerdem kann Singleton staatlich sein. Auf diese Weise können mehrere Singleton-Klassen als staatliches Repository zur Verfügung gestellt werden. Singleton-Klassen können Sie diese Anzahl beibehalten und automatisch durch Synchronisieren von sicherer Synchronen durch die Datenbank auf die Datenbank speichern, ohne die Einstaatschnittstelle zu ändern.
Darüber hinaus kann Singleton auch staatenlos sein. Bietet Werkzeugfunktionen,
Das Singleton -Modell bietet uns die Möglichkeit, diese Weise implementieren zu können. Der Vorteil der Verwendung von Singleton besteht darin, dass es Speicher speichern kann, da es die Anzahl der Instanzen einschränkt und der Java -Müllsammlung förderlich ist.
Wir sehen oft, dass Klassenlader im Factory -Modus auch im Singleton -Modus implementiert werden, da die geladene Klasse tatsächlich zu Ressourcen gehört.
So verwenden Sie den Singleton -Modus
Das allgemeine Singleton -Muster hat normalerweise mehrere Formen:
Die Codekopie lautet wie folgt:
öffentliche Klasse Singleton {
private Singleton () {}
// Ist es nicht seltsam, eine Instanz von sich selbst in sich selbst zu definieren?
// Beachten Sie, dass dies nur für interne Anrufe privat ist
private statische Singleton -Instanz = new Singleton ();
// Hier ist eine statische Methode für den externen Zugriff auf diese Klasse, auf die direkt zugegriffen werden kann
public static singleton getInstance () {
Rückkehrinstanz;
}
}
Die zweite Form:
Die Codekopie lautet wie folgt:
öffentliche Klasse Singleton {
private statische Singleton -Instanz = NULL;
public statische synchronisierte Singleton getInstance () {
// Diese Methode wird über das obige verbessert.
// Erstellen Sie Instanzen während der Verwendung und verbessern Sie die Effizienz!
if (instance == null)
Instance = new Singleton ();
Rückkehrinstanz;
}
}
Singleton.getInstance () kann verwendet werden, um auf Singleton -Klassen zuzugreifen.
Die obige zweite Form ist die faule Initialisierung, was bedeutet, dass der erste Singleton zum ersten Mal aufgerufen wird und in Zukunft nicht generiert werden muss.
Beachten Sie, dass synchronisiert im faulen Initialisierungsformular wichtig ist. Es gibt viele Diskussionen über die faule Initialisierung über die doppelte Überprüfung von Locking (DCL), und diejenigen, die daran interessiert sind, werden es weiter untersuchen.
Es wird allgemein angenommen, dass die erste Form sicherer ist.
Dinge zu beachten, wenn der Singleton -Modus verwendet wird
In einigen Fällen kann die Verwendung von Singleton den Zweck von Singleton nicht erreichen. -Server und Cross-JVM.
Nehmen wir den Servicelocator von Sun's Pet Store Source Code (Pet Store 1.3.1) als Beispiel und analysieren Sie ihn kurz:
Im Pet -Shop gibt es zwei Arten von Servicelocator, eine im EJB -Verzeichnis und der andere im Webverzeichnis. Positionierungsdienste, aber warum trennen Sie sie? Nach sorgfältiger Untersuchung dieser beiden Servicelokatoren fand ich den Unterschied: Servicelocator übernimmt den Singleton -Modus im Web, Servicelocator gehört zur Ressourcenpositionierung. Natürlich sollte der Singleton -Modus verwendet werden. In EJB hat das Singleton -Modell jedoch seine Funktion verloren, sodass Servicelocator in zwei Typen unterteilt ist, einer für Webdienste und der andere für EJB -Dienste.
Das Singleton -Muster sieht einfach aus und ist sehr bequem zu verwenden, aber es ist sehr schwierig, es gut zu verwenden.