Определение: убедитесь, что объект (класс) имеет только один экземпляр и предоставляет глобальную точку доступа для доступа к нему;
Принцип реализации: используйте закрытие, чтобы поддерживать ссылку на локальную переменную, которая имеет единственный экземпляр, созданный в первый раз;
В основном используется для: глобального кеша, плавающего входа в систему и т. Д., Когда необходим только уникальный экземпляр;
1. Методы реализации синглтонского шаблона для объекта не-синглетона (например, демонстрация):
Добавьте статический метод для демонстрации для реализации синглтона:
Demo.getSingle = (function () {var demo = null; return function (name) {if (! Demo) {demo = new demo (name);} return demo;}}) ();Использование:
Не-синглетонский режим: var a = new Demo ('peter');
Синглтон режим:
var b1 = demo.getsingle ('peter'); var b2 = demo.getsingl ('sufei'); b1 === b2; // true, все ссылка на новую демонстрацию ('peter')Реализуйте синглтоны через прокси -классы:
var proxydemo = (function () {var demo = null; return function (name) {if (! demo) {demo = new demo (name);} return demo;}}) ();Использование:
Не-синглетонский режим: var a = new Demo ('peter');
Синглтон режим: var b = new Proxydemo ('peter');
2. Lazy Singleton Pattern: Создайте синглтон только при необходимости;
Вот как создать общего ленивого синглтона:
var etsingle = function (foo) {var single = null; return function () {return Single || (single = foo.apply (это, аргументы)); }};Использование:
var createLoginLayer = function () {var fragment = document.createdocumentFragment (); var div = document.createElement ('div'); div.style.display = 'none'; // следующее добавляет другие элементы входа в Div ... Document.body.appendchild (frag.appendchild (div)); return div;} var createsingLoginLayer = getSing (createLoginlayer); // Когда пользователь нажимает кнопку в первый раз (id = когда 'lgbtn'), создать и отображать окно входа в систему. После повторного нажатия кнопки не будет создаваться неоднократно; document.getElementbyId ('lgbtn'). onclick = function () {var lg = createSingLeLoginLayer (); lg.style.display = 'block';}Приложение: результат расчета функции кэша, такой как расчет последовательности чисел
Ниже приведен способ писать без кеша, что очень медленно!
Функция foo (n) {Results = n <2? n: foo (n - 1) + foo (n - 2); Результаты возврата;} console.log (foo (40)); // Это должно быть рассчитано в течение нескольких секундНиже приведен метод написания кэша, и результаты в основном мгновенно произведены!
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));Лучшее письмо:
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));Ссылки:
"Режим JavaScript"
"JavaScript Design Matters и практика разработки"
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.