意义
介绍
系统中被唯一使用
一个类只有一个实例
数据同步
类和UML类图
TypeScript
class SingleObject {
// 私有化构造函数能防止被意外 new
private constructor () {};
// 标识这个实例
private static instance: SingleObject;
// 创建实例的唯一方式在类内部
public static getInstance(): SingleObject {
// 若是已经创建则直接返回,若是未创建则创建
if (!this.instance) {
this.instance = new SingleObject();
}
// 方法和instance标识都是静态,可以访问同一个
return this.instance;
}
public login(): void {
console.log('login');
}
}
// 模拟创建实例
let single1: SingleObject = SingleObject.getInstance();
let single2: SingleObject = SingleObject.getInstance();
// 其实是同一个实例
console.log(single1 === single2); // true
// let a = new SingleObject() // 会报错
应用场景
当一个类只需要被实例化一次就应该要想到使用单例设计模式
jquery
// jQuery 只有一个 `$`
if (window.jQuery != null) {
return window.jQuery
} else {
// init
}