推荐答案
// www.javascriptcn.com code example
class Singleton {
constructor() {
if (!Singleton.instance) {
Singleton.instance = this;
}
return Singleton.instance;
}
static getInstance() {
if (!Singleton.instance) {
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
}
// 使用示例
const instance1 = new Singleton();
const instance2 = new Singleton();
console.log(instance1 === instance2); // true
const instance3 = Singleton.getInstance();
const instance4 = Singleton.getInstance();
console.log(instance3 === instance4); // true本题详细解读
单例模式的概念
单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式通常用于管理共享资源,例如数据库连接、线程池等。
实现思路
- 构造函数控制实例化:在构造函数中检查是否已经存在实例,如果不存在则创建实例并保存,否则返回已存在的实例。
- 静态方法获取实例:通过静态方法
getInstance来获取单例实例,确保全局只有一个实例。
代码解析
- 构造函数:
constructor方法中通过检查Singleton.instance是否存在来控制实例的创建。如果不存在,则将当前实例赋值给Singleton.instance,否则直接返回已存在的实例。 - 静态方法:
getInstance方法通过静态方式调用,确保在类外部可以通过Singleton.getInstance()获取单例实例。
使用场景
- 当需要确保一个类只有一个实例时,例如全局配置管理、日志记录器等。
- 当需要控制资源访问时,例如数据库连接池、线程池等。
注意事项
- 单例模式在多线程环境下可能会遇到线程安全问题,需要额外处理。
- 单例模式可能会导致代码的耦合性增加,使用时需谨慎。