Перейти к содержанию

Паттерн синглтон

Традиционный синглтон паттерн используется для решения кейсов, когда код должен быть упакован в классе.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
class Singleton {
    private static instance: Singleton;
    private constructor() {
        // сделать что-нибудь...
    }
    static getInstance() {
        if (!Singleton.instance) {
            Singleton.instance = new Singleton();
            // ... здесь единожды выполняется инициализация ...
        }
        return Singleton.instance;
    }
    someMethod() {}
}

let something = new Singleton(); // Ошибка: конструктор 'Singleton' является
// приватным.

let instance = Singleton.getInstance(); // сделать что-нибудь с экземпляром...

Однако, если вам не нужна ленивая инициализация, вы можете вместо этого просто использовать namespace:

1
2
3
4
5
6
namespace Singleton {
    // ... здесь единожды выполняется инициализация ...
    export function someMethod() {}
}
// Использование
Singleton.someMethod();

Предупреждение: Синглтон - это просто причудливое название для global

Для большинства проектов namespace можно заменить на module.

1
2
3
4
5
6
// someFile.ts
// ... здесь единожды выполняется инициализация ...
export function someMethod() {}

// Использование
import { someMethod } from './someFile';

Комментарии