单例模式

概述

单例模式指保证一个类只生成一个实例,且在全局提供一个访问点。单例模式适用场景有:系统中仅有一个打印机后台处理程序、一个文件系统、一个 window 窗口管理器;应用中仅有一个线程池、全局缓存;数字滤波器仅有一个 A/D 转换器;会计系统仅为一家公司服务等。

创建单例的方式在于,由类自身提供创建单例的方法,并阻止创建其他实例。通过全局变量创建单例无法阻止创建出多个实例,且会造成命名空间污染。如果需要对实例进行扩展,可以使用子类进行扩展,并且客户端应能在不修改代码的情况下使用该扩展实例。

经典实现

单例模式包含下列组件:

  • Singleton:定义创建单例的静态方法。
1
2
3
4
5
6
7
8
9
10
11
12
class Singleton {
instance:Singleton = null;

static getInstance(){
if (!this.instance){
this.instance = new Singleton();
};
return this.instance;
}

protected constructor(){}// 保护方法,保证只能由 getInstance 创建单例
}