Есть ли у синглтонов преимущества перед модулями в TypeScript? - PullRequest
3 голосов
/ 06 мая 2020

Я использовал node / JavaScript несколько лет и сейчас только знакомлюсь с TypeScript. Я пытаюсь понять, когда использовать класс, а когда использовать модуль в TypeScript.

В JavaScript я часто создавал такие модули:

const name = "batman";

function getName() {
  return name;
}

module.exports = {
  name
};

В TypeScript этот же код можно записать как:

const name: string = "batman";

export function getName(): string {
  return name;
}

Однако в читая онлайн, можно найти множество примеров синглтонов в TypeScript. Я мог бы также написать этот код как одноэлементный класс, например:

export default class Singleton {
    private static instance: Singleton;
    private name: string = "batman";

    private constructor() { }

    public static getInstance(): Singleton {
        if (!Singleton.instance) {
            Singleton.instance = new Singleton();
        }

        return Singleton.instance;
    }

    public getName() {
        return this.name;
    }
}

Я изо всех сил пытаюсь понять, зачем мне когда-либо создавать синглтон, поскольку в модуле меньше кода и, возможно, проще. Он также существует только в виде единственного экземпляра. Есть ли преимущества, которые предлагает синглтон?

1 Ответ

1 голос
/ 09 мая 2020

Да, модуль намного проще и во многих случаях лучший выбор. Однако синглтоны имеют два преимущества:

  • они могут использовать ленивую инициализацию, при создании экземпляра при первом использовании
  • их легче преобразовать в нормальный class, если в этом возникнет необходимость. для возникновения нескольких экземпляров. (И это действительно очень часто, если ваш экземпляр сохраняет состояние - в отличие от кода в вашем примере).
...