На главную

Синглтон (Одиночка)

Суть паттерна "Синглтон" и его реализация на TypeScript

Паттерн Синглтон (Одиночка) пригодится в тех случаях, когда необходимо гарантировать, что экземпляр объекта будет единственным в приложении. То есть: ЕСЛИ уже есть созданный экземпляр класса ТО отдаём ссылку на него ИНАЧЕ инициализируем создание объекта и только после этого возвращаем ссылку.

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

Добиться этого можно на уровне архитектуры самого объекта, сделав конструктор приватным.

class GameTimer {
private startTime: Date;
private static gameTimer: GameTimer;

// делаем конструктор приватным
private constructor() {
// в момент создания объекта будет выставлено время начала игры
this.startTime = new Date();
}

public getStartTime() {
return this.startTime;
}

// публичный статический метод, которым будут пользоваться потребители
// чтобы получить объект таймера
public static getGameTimer() {
// гарантия того, что объект будет проинициализирован только 1 раз
if (!GameTimer.gameTimer) {
GameTimer.gameTimer = new GameTimer();
}
return GameTimer.gameTimer;
}
}

Комментарии