Skip to content

singleton

单例模式 - 确保类只有一个实例,并提供全局访问点。

函数签名

typescript
function createSingleton<T>(
  factory: () => T,
  options?: SingletonOptions
): SingletonInstance<T>

interface SingletonOptions {
  eager?: boolean
  onDestroy?: () => void
}

interface SingletonInstance<T> {
  getInstance: () => T
  hasInstance: () => boolean
  destroyInstance: () => void
  resetInstance: () => T
}

参数

参数名类型必填说明
factory() => T实例工厂函数
options.eagerboolean是否立即初始化,默认 false
options.onDestroyFunction销毁时的回调

返回值

类型说明
SingletonInstance单例实例管理器

工作原理

  1. 懒加载:首次调用 getInstance() 时才创建实例
  2. 唯一性:后续调用返回同一个实例
  3. 可销毁:支持销毁和重置

使用示例

typescript
import { createSingleton } from 'zcw-shared/functions/patterns/singleton'

class DatabaseConnection {
  constructor(public url: string) {
    console.log('连接数据库...')
  }
}

const dbSingleton = createSingleton(
  () => new DatabaseConnection('mongodb://localhost:27017')
)

const db1 = dbSingleton.getInstance()
const db2 = dbSingleton.getInstance()

console.log(db1 === db2)  // true

单例模式 - 确保全局唯一实例!