Шаблон проектирования 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/