Загрузка...
Загрузка...
Синглтон (Singleton, Одиночка) — это порождающий паттерн проектирования, который гарантирует, что у класса будет только один единственный экземпляр, к которому можно получить доступ из любого места программы. Это особенно полезно для ресурсов, которые должны быть уникальны в рамках приложения: конфигурация, логгер, кэш и т.д.
Зачем нужен Синглтон:
Синглтон обеспечивает централизованный способ управления ресурсами и предоставляет универсальную «точку входа» (instance) к своему функционалу.
При этом он гарантирует, что более одного экземпляра объекта не будет создано в ходе выполнения программы.
Когда нужно работать с ресурсом, который должен существовать строго в одном экземпляре, например глобальный логгер, пул соединений или конфигурация приложения.
Когда нужно обеспечить удобную точку доступа к объекту из разных частей кода, без необходимости пробрасывать его через все уровни.
Синглтон часто рассматривают как «более управляемую» альтернативу глобальным переменным, так как его можно протестировать и инкапсулировать логику.
Закрытый (private) конструктор
Запрещает создавать объекты через new, вынуждая всех пользоваться специальным методом доступа.
Статический метод доступа
Обычно называется getInstance(). При первом вызове создаёт экземпляр и сохраняет его, а при последующих возвращает уже созданный объект.
Статическая переменная
Хранит ссылку на единственный экземпляр класса.
class Singleton {
private static instance: Singleton;
private constructor() {
// Приватный конструктор не даёт создать объекты извне
console.log("Инициализация единственного экземпляра...");
}
public static getInstance(): Singleton {
if (!Singleton.instance) {
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
public someMethod(): void {
console.log("Вызов метода у синглтона!");
}
}
// Пример использования
const obj1 = Singleton.getInstance(); // Инициализация и создание
const obj2 = Singleton.getInstance(); // Возвращает уже созданный экземпляр
console.log(obj1 === obj2); // true — оба ссылаются на один и тот же объект
obj1.someMethod(); // "Вызов метода у синглтона!"
getInstance() метод проверяет, есть ли уже созданный объект. Если нет — создаёт, если да — возвращает существующий.Внимание:
Избыточное использование синглтонов может привести к сильной связанности кода и затруднить тестирование. Перед тем, как внедрять Singleton, подумайте о паттернах вроде IoC (Inversion of Control) или DI (Dependency Injection).
Подробнее про Синглтон можно почитать здесь.