单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用
完整代码参考: singleton
由于 js 不存在多线程,也没有异步的构造,所以 js 的懒汉反而不需要什么同步机制啊,锁机制之类的控制
class Singleton {
private static SingletonObj: Singleton = null;
private constructor(...any: any[]) {
Object.assign(this, ...any);
}
static getInstance(...any: any[]): Singleton {
// 在其他语言中这实际上有些线程不安全,但 js 是单线程语言则不存在这个问题。
if (!this.SingletonObj) {
// 用的时候创建
// Lazy Loading, 如果从始至终从未使用过这个实例,则不会造成内存的浪费。
this.SingletonObj = new Singleton(...any);
}
return this.SingletonObj;
}
}
const sl: Singleton = Singleton.getInstance([1, 3, 5]);
console.log(sl);
class Singleton {
private static SingletonObj: Singleton = new Singleton([1, 2, 4, 8]);
private constructor(...any: any[]) {
Object.assign(this, ...any);
}
static getInstance(): Singleton {
return this.SingletonObj;
}
}
// error: 类“Singleton”的构造函数是私有的,仅可在类声明中访问。
// const sl: Singleton = new Singleton(1, 3, 5);
const sl: Singleton = Singleton.getInstance();
console.log(sl);