Definition: Stellen Sie sicher, dass ein Objekt (Klasse) nur eine Instanz hat und einen globalen Zugriffspunkt für darauf bietet.
Implementierungsprinzip: Verwenden Sie Verschlüsse, um einen Verweis auf eine lokale Variable aufrechtzuerhalten, die die einzige zum ersten Mal erstellte Instanz enthält.
Hauptsächlich verwendet für: globaler Cache, Anmeldebloßenfenster usw., wenn nur eine eindeutige Instanz benötigt wird;
1. Methoden zur Implementierung des Singleton-Musters für ein Nicht-Singleton-Musterobjekt (z. B. Demo):
Fügen Sie Demo eine statische Methode hinzu, um einen Singleton zu implementieren:
Demo.getSingle = (function () {var Demo = null; Rückgabefunktion (Name) {if (! Demo) {Demo = new Demo (Name);} return Demo;}}) ();Verwendung:
Nicht-Singleton-Modus: var a = neue Demo ('Peter');
Singleton -Modus:
var b1 = Demo.Getsingle ('Peter'); var b2 = Demo.GetSingle ('Sufei'); B1 === B2; // True, alle Referenzneue -Demo ('Peter')Implementieren Sie Singletons durch Proxy -Klassen:
var proxyDemo = (function () {var Demo = null; Rückgabefunktion (Name) {if (! Demo) {Demo = new Demo (name);} return Demo;}}) ();Verwendung:
Nicht-Singleton-Modus: var a = neue Demo ('Peter');
Singleton -Modus: var b = neuer Proxydemo ('Peter');
2. Lazy Singleton Muster: Erstellen Sie den Singleton nur bei Bedarf;
Hier erfahren Sie, wie Sie einen allgemeinen faulen Singleton erstellen:
var getSingle = function (foo) {var Single = null; return function () {return Single || (Single = foo.apply (this, Argumente)); }};Verwendung:
var createLoginLayer = function () {var fragment = document.CreateCumentFragment (); var div = document.createelement ('div'); div.style.display = 'none'; // Folgendes fügt dem Div ... document.body.AppendChild (Frag.AppendChild (div)) andere Anmeldeelemente hinzu; return div;} var createSingleloginLayer = GetSingle (createLoginLayer); // Wenn der Benutzer zum ersten Mal auf die Schaltfläche klickt (ID = wenn 'LGBTN'), erstellen und anzeigen Sie das Anmeldefenster. Nach dem wiederholten Klicken der Schaltfläche wird nicht wiederholt erstellt. document.getElementById ('LGBTN'). onclick = function () {var lg = createSingleloginLayer (); lg.style.display = 'block';}Anhang: Das Berechnungsergebnis der Cache -Funktion, z. B. die Berechnung einer Abfolge von Zahlen
Das Folgende ist eine Möglichkeit, ohne Cache zu schreiben, was sehr langsam ist!
Funktion foo (n) {resultation = n <2? N: foo (n - 1) + foo (n - 2); Rückgabeergebnisse;} console.log (foo (40)); // Es muss für mehrere Sekunden berechnet werdenDas Folgende ist die Cache -Schreibmethode, und die Ergebnisse werden im Grunde genommen sofort erzeugt!
var cache = {}; Funktion foo (n) {if (! cache [n]) {cache [n] = n <2? N: foo (n - 1) + foo (n - 2); } return cache [n];} console.log (foo (100));Besseres Schreiben:
var foo = (function () {var cache = {}; Rückgabefunktion (n) {if (! cache [n]) {cache [n] = n <2? n: foo (n - 1) + foo (n - 2);} return cache [n];};}) (); console.log (foo (100));Referenzen:
"JavaScript -Modus"
"JavaScript -Designmuster und Entwicklungspraxis"
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.