1. Modus Einführung
Definition von Muster
Stellen Sie sicher, dass eine bestimmte Klasse nur eine Instanz hat und sie selbst instanziiert und diese Instanz für das gesamte System zur Verfügung stellt.
Modus -Nutzungsszenario
Stellen Sie sicher, dass eine Klasse nur über ein Objekt verfügt. Zum Beispiel erfordert das Erstellen eines Objekts zu viele Ressourcen, wie z. B. Zugriff auf Ressourcen wie IO und Datenbanken.
2. UML -Klassendiagramm
Charaktereinführung:
(1) Kunde: High-Level-Client.
(2) Singleton: Singleton.
3. Einfache Implementierung des Musters
öffentliche Klasse Singleton {private statische Singleton -Intance; private Singleton () {} public static singleton getInstance () { / * * zu Beginn, wenn mehrere Threads hereinkommen, begegnen sie Schlösser, und ein Thread geht hinein, was leer ist, neues Objekt; Nachfolgende Threads eingeben, nicht leer, keine Operation; Schließlich direkt zurückgeben }} Return Intance; }} Klasse Singleton1 {// Lazy Private static Singleton1 inance = new Singleton1 (); // Lazy, es lädt private Singleton1 () {} public static singleton1 getInstance () {return Intance; }} Klasse Singleton2 {// hungry private statische Singleton2 -Intance; private Singleton2 () {} public static Singleton2 getInstance () {// lädt if (inance == null) {inance = new Singleton2 (); } Return Intance; }} Klasse Singleton3 {// private statische Singleton3 -Intance; private Singleton3 () {} public synchronisierte statische Singleton3 getInstance () {// Bei Verwendung laden, sperren multi-thread-Anrufe eine Sperraktion if (inance == null) {inance = new Singleton3 (); } Return Intance; }} Klasse Singleton4 {// private statische Singleton4 -Intance; private Singleton4 () {} public static Singleton4 getInstance () {// Collapse Synchronized (Singleton4.class) {// Die Sperreffizienz ist ähnlich wie 3 if (intance == null) {inance = new Singleton4 (); }} Return Intance; }}4. Profis und Nachteile
(1) Vorteile:
A. Da der Singleton -Modus nur eine Instanz im Gedächtnis hat, werden die Speicherausgaben reduziert, insbesondere wenn ein Objekt häufig erstellt und zerstört werden muss und die Leistung während der Erstellung oder Zerstörung nicht optimiert werden kann, sind die Vorteile des Singleton -Modus sehr offensichtlich.
B. Da das Singleton -Muster nur eine Instanz erzeugt, wird der Leistungsaufwand des Systems reduziert. Wenn die Erzeugung eines Objekts viele Ressourcen erfordert, z. B. das Lesen von Konfiguration und das Generieren anderer abhängiger Objekte, kann sie gelöst werden, indem ein Singleton -Objekt direkt generiert wird, wenn die Anwendung startet und dann dauerhaft im Speicher liegt.
Der C. Singleton -Modus kann mehrere Ressourcenberufe wie eine Schreibdateiaktion vermeiden, da sich nur eine Instanz im Speicher befindet. Vermeiden Sie gleichzeitige Schreibvorgänge in derselben Ressourcendatei.
D. Singleton -Modus kann globale Zugriffspunkte im System festlegen, den Zugriff auf Ressourcen optimieren und teilen. Beispielsweise kann eine Singleton -Klasse so konzipiert werden, dass sie für die Zuordnung und Verarbeitung aller Datentabellen verantwortlich ist.
(2) Nachteile
A. Singleton -Modus hat im Allgemeinen keine Schnittstelle und es ist schwierig zu erweitern. Wenn Sie erweitern möchten, gibt es im Grunde keine zweite Möglichkeit, es zu implementieren, außer zu ändern, als der Code zu ändern.