Одиночка в JavaScript.

Если бы вы когда-нибудь хотели иметь общий источник данных для нескольких модулей или функций javascript, как бы вы это сделали?

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

Singleton — это шаблон проектирования javascript, который ограничивает вас наличием только одного экземпляра объекта, предоставляя вам единственный источник правды для ваших данных.

Несколько файлов могут импортировать его, но все равно будут использовать одни и те же данные. Если одна из функций или файлов изменяет данные, они будут изменены для всех, обращающихся к одному и тому же источнику (хранилище Redux основано на синглтоне).

Так в чем же принцип?
В javascript, когда вы присваиваете объект новой переменной, на самом деле происходит присвоение ссылки на исходную переменную. объект в новую переменную (передайте по ссылке, как показано ниже, где изменение значения v1.name изменяет значение obj.name тоже).

Итак, для создания синглтона нам нужна функция, которая сначала создает экземпляр объекта данных (источник правды), а затем скрывает эти данные внутри него приватно (как приватный член функции) и, наконец, предоставляет интерфейс с методами get и set для тщательного управления этими данными.

Например, как показано ниже, где name и count являются закрытыми членами, а методы get и set являются интерфейсом для доступа и управления ими, возвращаемыми этой функцией.

имя и количество составляют часть данных, а getValues и setValues составляют его интерфейсную часть. Как видите, функция возвращает объект со ссылкой на эти методы get и set. Эти методы будут общими для нескольких модулей, и это гарантирует, что все они будут получать или изменять одно и то же имя и количество переменные.

Вы должны убедиться, что указанная выше функция (принцип) возвращает только один экземпляр объекта. Для этого мы должны запустить функцию только один раз, а затем экспортировать возвращенный объект в другие файлы, которым нужен доступ к нему. Это можно сделать, как показано ниже, где я экспортирую Экземпляр, возвращенный функцией Пример. Также обратите внимание, что по умолчанию я установил для name значение 'xyz', а для count значение 10 (предположим, эта функция находится в файле file1.js)

Теперь, чтобы продемонстрировать единственный источник правды, предположим, что у нас есть другой файл2, и он импортирует указанный выше экземпляр из файла1 и изменяет его на 'abc', 200, как показано ниже:

Предположим, у нас есть еще один файл 3, и он также импортирует тот же самый экземпляр, как показано ниже:

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

Таким образом, вы можете использовать шаблон проектирования javascript singleton для управления объектом данных в вашем приложении.