В этой статье мы рассмотрим шаблон проектирования Singleton и его реализацию в TypeScript. Шаблон Singleton — это творческий шаблон проектирования, который ограничивает создание экземпляра класса одним объектом, гарантируя, что во всем приложении существует только один экземпляр класса. Мы обсудим концепцию шаблона Singleton и предоставим примеры кода для различных способов его реализации в TypeScript.
Понимание шаблона проектирования Singleton.
Шаблон Singleton обычно используется, когда нам необходимо ограничить количество экземпляров класса по различным причинам, например, для совместного использования ресурсов, управления глобальным состоянием или контроля доступа к ресурсу. Он обеспечивает глобальную точку доступа к созданному объекту, позволяя получить к нему доступ из любой точки приложения.
Метод 1: нетерпеливая инициализация
При нетерпеливой инициализации создается экземпляр класса Singleton во время загрузки класса. Это гарантирует, что экземпляр всегда доступен и готов к доступу.
class Singleton {
private static instance: Singleton = new Singleton();
private constructor() { }
public static getInstance(): Singleton {
return this.instance;
}
}
Метод 2: ленивая инициализация (простой)
При ленивой инициализации экземпляр класса Singleton создается только при первом запросе. Это может помочь оптимизировать использование памяти и повысить производительность.
class Singleton {
private static instance: Singleton | null = null;
private constructor() { }
public static getInstance(): Singleton {
if (!this.instance) {
this.instance = new Singleton();
}
return this.instance;
}
}
Метод 3: ленивая инициализация (потокобезопасная)
Подход ленивой инициализации может быть дополнительно улучшен для обеспечения потокобезопасности в многопоточной среде с использованием методов синхронизации.
class Singleton {
private static instance: Singleton | null = null;
private constructor() { }
public static getInstance(): Singleton {
if (!this.instance) {
// Synchronize access for thread safety
synchronized (Singleton.class) {
if (!this.instance) {
this.instance = new Singleton();
}
}
}
return this.instance;
}
}
Метод 4: Singleton с внедрением зависимостей (DI)
В TypeScript мы также можем реализовать шаблон Singleton, используя платформы внедрения зависимостей. Вот пример использования популярной библиотеки InversifyJS.
import { injectable } from 'inversify';
@injectable()
class Singleton {
// Class implementation
}
// Usage
const instance = container.get(Singleton);
В этой статье мы рассмотрели различные методы реализации шаблона проектирования Singleton в TypeScript. Мы обсудили быструю инициализацию, ленивую инициализацию (простую и потокобезопасную) и использование фреймворков внедрения зависимостей. Понимание шаблона Singleton и вариантов его реализации поможет вам принимать обоснованные решения при создании одноэкземплярных классов в проектах TypeScript.