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.eager | boolean | 否 | 是否立即初始化,默认 false |
options.onDestroy | Function | 否 | 销毁时的回调 |
返回值
| 类型 | 说明 |
|---|---|
SingletonInstance | 单例实例管理器 |
工作原理
- 懒加载:首次调用
getInstance()时才创建实例 - 唯一性:后续调用返回同一个实例
- 可销毁:支持销毁和重置
使用示例
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单例模式 - 确保全局唯一实例!