space2pacman
@space2pacman
Просто царь.

Как применить паттерн singleton в node.js?

Как применить паттерн singleton в node.js в разных файлах не используя глобальный объект global ?

Структура приложения
app/app.js
app/files/Shop.js
app/files/Fruits.js

app.js
let Shop = require("./files/Shop");
let shop = new Shop();


Fruits.js
let Shop = require("./Shop");
let shop = Shop.getInstance(); // цель - получение ссылки на созданный экземпляр в app.js


Так как файл подключается заново соответственно все те переменные или статические свойства(Shop.instance), которые в нем создаются чтобы хранить ссылку на экземпляр - пересоздаются.

Решение:

Shop.js
class Shop {
    constructor() {
        this._store = null;
    }

    setStore(value) {
        this._store = value;
    }

    getStore(value) {
        return this._store;
    }
}

module.exports = new Shop();


app.js
let shop = require("./files/Shop");

shop.setStore("apple");


Fruits.js
let shop = require("./Shop");

shop.getStore(); // "apple"
  • Вопрос задан
  • 2704 просмотра
Решения вопроса 1
Ты нигде не показываешь, как делаешь экспорт.

Сами по себе CommonJS модули уже реализуют Singleton.

// app/app.js
const Shop = require("./files/Shop");
const shop = new Shop();

module.exports = shop;


// app/files/Fruits.js
const shop = require('../app'); // shop, созданный в app.js, будет всегда один и тот же


При подключении файла require('../app'); заново, будет получен тот же самый shop.

Если ты хочешь получить shop из модуля Shop, то ты можешь создать его один раз там и экспортировать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 10:01
500 руб./за проект
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час