Шаблон проектирования singleton — популярный шаблон для JavaScript. Он предлагает средства организации кода в логический фрагмент, доступ к которому можно получить через одну переменную. Когда для продолжительности работы приложения требуется один экземпляр объекта, используется шаблон одноэлементного проектирования. Шаблон Singleton в JavaScript можно использовать для различных целей, включая NameSpacing, который уменьшает количество глобальных переменных на вашей странице (предотвращая загромождение глобального пространства), согласованную организацию кода и улучшение читабельность и ремонтопригодность ваших страниц.

Стандартное определение шаблона Singleton подчеркивает эти две идеи:

  • Классу должно быть разрешено иметь только один экземпляр, и
  • Мы должны сделать этот единственный экземпляр доступным для любого человека в мире.

Позвольте мне объяснить шаблон синглтона в контексте JavaScript:

Инкапсуляция — это процесс использования объекта для предоставления пространства имен набору связанных методов и атрибутов. Если инициация разрешена, это можно сделать только один раз.

Используя литералы объектов, мы можем генерировать синглтоны в JavaScript. Есть еще один вариант, о котором я расскажу в следующей статье.

Сам объект со всеми его элементами (методами и атрибутами), а также глобальная переменная, используемая для доступа к нему, составляют одноэлементный объект. Одной из основных характеристик шаблона singleton является то, что переменная является глобальной, что позволяет объекту быть доступным из любого места на странице.

JavaScript: синглтон как пространство имен

Как я уже упоминал, синглтоны можно использовать в JavaScript для объявления пространств имен. В JavaScript NameSpacing играет важную роль в ответственном программировании. Потому что все может быть изменено, и потому что очень просто случайно удалить переменную, метод или даже класс, не осознавая этого. В качестве примера того, что часто происходит при одновременной работе с другим членом команды,

function findUserName(id) 



/* Later in the page another programmer
added code */
var findUserName = $('#user_list');

/* You are trying to call :( */
console.log(findUserName())

Пространство имен вашего кода внутри одноэлементного объекта — один из лучших способов избежать непреднамеренной перезаписи переменных.

/*  Using Namespace */

var MyNameSpace = 
  findUserName : function(id) ,
  // Other methods and attribute go here as well


/* Later in the page another programmer
added code */
var findUserName = $('#user_list');

/* You are trying to call and you make this time workable */
console.log(MyNameSpace.findUserName());

Реализация шаблона проектирования Singleton

/* Lazy Instantiation skeleton for a singleton pattern */

var MyNameSpace = ;
MyNameSpace.Singleton = (function() 

  // Private attribute that holds the single instance
  var singletonInstance;  

  // All of the normal code goes here
  function constructor() 
    // Private members
    var privateVar1 = "Nishant";
    var privateVar2 = [1,2,3,4,5];

    function privateMethod1() 
      // code stuff
    

    function privateMethod1() 
      // code stuff
    

    return 
      attribute1 : "Nishant",
      publicMethod: function() 
        alert("Nishant");// some code logic
      
    
  

  return 
    // public method (Global access point to Singleton object)
    getInstance: function() 
      //instance already exist then return  
      if(!singletonInstance) 
        singletonInstance = constructor();
      
      return singletonInstance;           
               
  

)();   

// getting access of publicMethod
console.log(MyNamespace.Singleton.getInstance().publicMethod());

Синглтон, который был использован выше, прост для понимания. Статический метод getInstance() класса singleton возвращает ссылку на единственный экземпляр singleton, который класс singleton хранит как статическую ссылку.

https://www.codesolutionstuff.com/describe-singleton-pattern-in-javascript/

Изучите разработку полного стека — CodeSolutionStuff