Как определить шаблон Singleton с параметром, используя ключевое слово static? - PullRequest
0 голосов
/ 28 сентября 2019

Согласно второму ответу здесь , я пытаюсь создать шаблон Singleton в JS для хранения данных и вызова его прототипов из других экземпляров.

Основная проблема в том, что Singleton не сохраняет данные после получения первого экземпляра.

[{…}] 0: {firstName: "John", lastName:"Grand"}

Вот как я это сделал:

export default class Terminal {
    static cache(output) {
        // Singleton
        if (!Terminal.instance) {
            Terminal.instance = new Terminal(output);
        }
        return Terminal.instance;
    }
    constructor(output) {
        // Create an array
        this.logs = [];

        // Switch to an object
        const data = Object.assign({}, output);

        // Add the object to the array
        this.logs.push(data);

        // Inspect
        console.log(this.logs);
    }
}

// instance 1
import Terminal from './terminal.js';
class Person {
    constructor(firstName, lastName, input) {
        this.firstName = firstName;
        this.lastName = lastName;

        // Assign the Singleton
        this.input = input || Terminal.cache(this);
    }
}
let player1 = new Person('John', 'Grand');

// instance 2
import Terminal from './terminal.js';
class Grocery {
    constructor(name, stock, input) {
        this.name = name;
        this.stock = stock;

        // Assign the Singleton
        this.input = input || Terminal.cache(this);
    }
}
let shop1 = new Grocery('Apple', 12);

Я хочу, чтобы ключевое слово new было внутри класса, когда я определяю Singletonpattern.

Какие-нибудь советы, чтобы решить мою проблему?

Спасибо.

1 Ответ

1 голос
/ 28 сентября 2019

Метод cache() должен выдвинуть output в массив logs, когда объект уже существует.

    static cache(output) {
        // Singleton
        if (!Terminal.instance) {
            Terminal.instance = new Terminal(output);
        } else {
            Terminal.instance.logs.push(Object.assign({}, output));
        }
        return Terminal.instance;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...