Dieser Artikel teilt den spezifischen Code des Singleton -Musters des Java -Designmusters für Ihre Referenz. Der spezifische Inhalt ist wie folgt
Konzept:
Singleton -Muster: Es gibt nur eine Instanz in einer Klasse.
Eine Klasse hat und nur eine Instanz und bietet einen globalen Zugangspunkt.
Ursachen für diesen Modus:
Wenn wir Websites durchsuchen, werden einige Websites "aktuelle Anzahl der Personen online" angezeigt. Im Allgemeinen besteht die Art und Weise, diese Funktion zu implementieren, das Speichern jeder protokollierten IP in einem Speicher, einer Datei oder einer Datenbank, und jede zusätzliche IP wird "+1" erreicht. Im Allgemeinen handelt es sich um eine Methode wie add (), um die Funktion von "+1" zu realisieren. Verwenden Sie beispielsweise die Anweisung "Aktualisieren", um die in der Datenbank gespeicherten Daten zuerst und dann +1 zu erhalten, die Daten in der Datenbank zu aktualisieren und dann zu speichern. Wenn Sie auf der Seite angezeigt werden, können Sie die Daten in der Datenbank über eine andere Methode abrufen. Wenn sich jedoch mehrere Benutzer gleichzeitig anmelden, wenn jedes von ihnen neu ein Objekt benötigt, dann die Methode add () über den Aufruf "Objekt. Methodenname" ausführen und die Daten in der Datenbank speichern, können mehrere Benutzer die tatsächlichen Benutzerdaten nicht genau in der Datenbank aufzeichnen. Daher kann das Entwerfen dieses Zählers als globales Objekt (jeder verwendet dieses Objekt anstelle eines neuen), und jeder teilt die gleichen Daten, die gleiche Probleme vermeiden. Dies ist eine der Anwendungen des Singleton -Musters, das wir nennen.
In ähnlicher Weise werden in anderen Szenarien ähnliche Szenarien auftreten und ähnliche Ideen werden verwendet. Zum Beispiel:
1. Externe Ressourcen: Jeder Computer verfügt über mehrere Drucker, aber nur ein Druckerspooler kann verwendet werden, um zu vermeiden, dass zwei Druckaufträge gleichzeitig an den Drucker ausgegeben werden. Interne Ressourcen: Die meisten Software verfügen über eine (oder mehr) Attributdateien zum Speichern von Systemkonfigurationen. Ein solches System sollte über ein Objekt verfügen, um diese Attributdateien zu verwalten. 2. Windows 'Task -Manager (Task -Manager) ist ein typischer Singleton -Modus (dies ist sehr vertraut). Denken Sie darüber nach, können Sie zwei Windows -Task -Manager öffnen? Wenn Sie es nicht glauben, probieren Sie es selbst aus ~ ~
3.. Recycle Bin für Windows ist auch eine typische Singleton -Anwendung. Während des gesamten Systembetriebs hat der Recyclingbehälter nur eine Instanz beibehalten.
4. Der Zähler der Website wird im Allgemeinen im Singleton -Modus implementiert, andernfalls ist es schwierig, zu synchronisieren.
5. Wie kann die Anwendungsprotokollanwendung im Singleton -Modus implementiert werden? Dies liegt im Allgemeinen daran, dass die freigegebene Protokolldatei immer geöffnet ist, da es nur eine Instanz zum Betrieb geben kann. Andernfalls ist der Inhalt schwer hinzuzufügen.
6. Der Singleton -Modus wird im Allgemeinen zum Lesen von Konfigurationsobjekten in Webanwendungen verwendet, da die Konfigurationsdatei eine freigegebene Ressource ist.
7. Das Design von Datenbankverbindungspools übernimmt im Allgemeinen einen Singleton -Modus, da die Datenbankverbindung eine Datenbankressource ist. Die Verwendung von Datenbankverbindungspools in Datenbank -Softwaresystemen speichert hauptsächlich Effizienzverluste, die durch Öffnen oder Schließen von Datenbankverbindungen verursacht werden. Dieser Effizienzverlust ist immer noch sehr teuer, da der Singleton -Modus diesen Verlust erheblich verringern kann.
8. Das Design von Multi-Thread-Thread-Pools nimmt im Allgemeinen den Singleton-Modus an, da der Thread-Pool die Steuerung von Fäden im Pool erleichtern muss.
9. Das Dateisystem des Betriebssystems ist auch ein spezifisches Beispiel für die Implementierung des großen Singleton -Modus. Ein Betriebssystem kann nur ein Dateisystem haben.
10. Httpapplication ist auch eine typische Anwendung von Beispiele für Einheiten. Jeder, der mit dem gesamten Antragslebenszyklus von ASP.NET (IIS) vertraut ist, sollte wissen, dass Httpapplication auch ein Singleton -Muster ist, und alle HTTPModules teilen eine HTTPapplication -Instanz.
Zusammenfassend lässt sich sagen, dass die allgemeinen Anwendungsszenarien des Singleton -Modus:
1. Objekte, die häufig instanziiert und dann zerstört werden müssen.
2. Objekte, die beim Erstellen von Objekten zu viel Zeit oder zu viel Ressource in Anspruch nehmen, häufig verwendet werden.
3. staatlich Werkzeug-ähnliche Objekte.
4. Häufiger Zugriff auf Datenbank- oder Dateiobjekte.
5. Vermeiden Sie im Falle von Ressourcenaustausch die Leistung oder den Verlust, der durch den Ressourcenbetrieb verursacht wird. Wie die Protokolldateien, Anwendungskonfigurationen usw. im obigen.
6. Bei der Kontrolle der Ressourcen die gegenseitige Kommunikation zwischen den Ressourcen erleichtern. Wie Threadpools usw.
Merkmale:
1. Es kann nur eine Instanz in einer Singleton -Klasse geben;
2. Die Singleton -Klasse muss eine eigene einzigartige Instanz schaffen;
3. Die Singleton -Klasse muss diese Instanz allen anderen Objekten bereitstellen.
Singleton -Musterelemente:
1. Private Baumethode
2. private statische Bezugspunkte auf Ihre eigene Instanz
3.. Öffentliche statische Methode mit eigener Instanz als Rückgabewert
Es gibt drei Möglichkeiten, das Singleton -Muster zu implementieren:
1. Hungriger Stil: Singleton -Instanzen werden beim Laden des Unterrichts gebaut und dringend initialisiert. (Vorspannungsmethode)
/*** Hungry Man Style (empfohlen) **/public class test {private test () {} public static test Instance = new Test (); öffentlicher Test getInstance () {return Instance; }} Vorteil
1. Fadensicherheit
2. Während des Ladens der Klasse wurde ein statisches Objekt erstellt, und die Reaktionsgeschwindigkeit ist beim Aufrufen schnell
Mangel
Die Ressourceneffizienz ist nicht hoch, und GetInstance () wird möglicherweise niemals ausgeführt, aber wenn andere statische Methoden der Klasse ausgeführt werden oder die Klasse (Klasse.Forname) geladen wird, wird diese Instanz noch initialisiert.
2. Lazy Style: Singleton -Instanzen werden beim ersten Mal gebaut und initialisiert.
Klasse test {private test () {} public static test Instance = null; öffentlicher statischer Test getInstance () {if (Instance == null) {// Wenn mehrere Threads bestimmen, dass die Instanz NULL ist, haben mehrere Threads eine Duplikation, wenn neue Operationen Instance = new Singleton2 () ausführen; } return Instance; }} Vorteil
Vermeiden Sie die Schaffung von Fällen, ohne sie in Form hungriger Männer zu verwenden. Die Ressourcenauslastungsrate ist hoch. Wenn Sie GetInstance () nicht ausführen, werden Sie nicht instanziert. Andere statische Methoden dieser Klasse können ausgeführt werden.
Mangel
Es gibt kein Problem mit faulen Stil in einem einzelnen Thread, aber wenn Kollegen auf mehrere Threads zugreifen, können sie mehrere Instanzen erstellen, und diese mehrere Instanzen sind nicht dasselbe Objekt. Obwohl die später erstellten Instanzen die zuerst erstellten Instanzen überschreiben, werden immer noch Fälle gegeben, in denen verschiedene Objekte erhalten werden. Die Lösung für dieses Problem besteht darin, synchronisiert zu sperren, was beim ersten Laden nicht schnell genug ist, und der unnötige Synchronisationsaufwand des Multi-Threading ist hoch.
3.. Doppelte Erkennung
Klasse test {private test () {} public static test Instance = null; öffentlicher statischer Test getInstance () {if (Instance == null) {synchronized (test.class) {if (instance == null) {instance = new Test (); }} return Instance; }} Vorteil
Die Ressourcenauslastungsrate ist hoch. Wenn Sie GetInstance () nicht ausführen, werden Sie nicht instanziert. Sie können andere statische Methoden dieser Klasse ausführen.
Mangel
Die Antwort war beim ersten Laden nicht schnell und scheiterte gelegentlich aus bestimmten Gründen des Java -Speichermodells.
4. statische interne Klassen
Klasse test {private test () {} private statische Klasse SingletonHelp {statische Testinstanz = new Test (); } öffentlicher statischer Test getInstance () {return SingletonHelp.instance; }} Vorteil
Die Ressourcenauslastungsrate ist hoch und wird nicht ausgeführt, ohne die Instanz zu erhalten. Sie können andere statische Methoden dieser Klasse ausführen.
Mangel
Nicht schnell genug beim Laden zum ersten Mal
Zusammenfassen:
Im Allgemeinen wird hungriger Stil verwendet. Wenn Sie sich sehr um Ressourcen kümmern, können Sie statische interne Typen verwenden. Es wird nicht empfohlen, einen faulen Stil und die doppelte Erkennung zu verwenden.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.