Definición: Asegúrese de que un objeto (clase) tenga solo una instancia y proporcione un punto de acceso global para acceder a él;
Principio de implementación: use cierres para mantener una referencia a una variable local que contenga la única instancia creada por primera vez;
Se utiliza principalmente para: caché global, ventana flotante de inicio de sesión, etc., cuando solo se necesita una instancia única;
1. Métodos para implementar el patrón Singleton para un objeto de patrón no singleton (como la demostración):
Agregue un método estático a la demostración para implementar un singleton:
Demo.getSingle = (function () {var demo = null; return function (name) {if (! Demo) {demo = new Demo (name);} return demo;}}) ();uso:
Modo no singleton: var a = nueva demostración ('Peter');
Modo Singleton:
var b1 = demo.getSingle ('Peter'); var b2 = demo.getsingle ('sufei'); b1 === B2; // Verdadero, toda la nueva demostración de referencia ('Peter')Implementar singletons a través de clases proxy:
var proxyDemo = (function () {var demo = null; return function (name) {if (! Demo) {demo = new Demo (name);} return demo;}}) ();uso:
Modo no singleton: var a = nueva demostración ('Peter');
Modo Singleton: var b = new ProxyDemo ('Peter');
2. Patrón de singleton perezoso: crea el singleton solo cuando sea necesario;
Aquí le mostramos cómo crear un singleton perezoso general:
var getSingleging = function (foo) {var single = null; function de return () {return senceo || (single = foo.apply (this, argumentos)); }};uso:
var createLogInlayer = function () {var fragment = document.createDocumentFragment (); var div = document.createElement ('div'); div.style.display = 'Ninguno'; // Lo siguiente agrega otros elementos de inicio de sesión al Div ... Document.Body.AppendChild (frag.appendChild (div)); return div;} var CreateSingLeloginLayer = getSingle (createLoginLayer); // Cuando el usuario hace clic en el botón por primera vez (id = When 'lgbtn'), cree y muestre la ventana de inicio de sesión. Después de hacer un clic repetido del botón, no se creará repetidamente; document.getElementById ('lgbtn'). onClick = function () {var lg = CreateSingLelogInlayer (); lg.style.display = 'bloque';}Adjunto: el resultado del cálculo de la función de caché, como calcular una secuencia de números
La siguiente es una forma de escribir sin caché, ¡lo cual es muy lento!
función foo (n) {resultados = n <2? n: foo (n - 1) + foo (n - 2); Resultados de retorno;} console.log (foo (40)); // debe calcularse durante varios segundos¡El siguiente es el método de escritura de caché, y los resultados se producen básicamente instantáneamente!
var cache = {}; function foo (n) {if (! cache [n]) {cache [n] = n <2? n: foo (n - 1) + foo (n - 2); } return cache [n];} console.log (foo (100));Mejor escritura:
var foo = (function () {var cache = {}; return function (n) {if (! cache [n]) {cache [n] = n <2? n: foo (n - 1) + foo (n - 2);} return cache [n];};}) (); console.log (foo (100));Referencias:
"Modo JavaScript"
"Patrones de diseño de JavaScript y práctica de desarrollo"
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.