MST

星途 面试题库

面试题:JavaScript 设计模式之单例模式应用

请使用 JavaScript 实现一个单例模式,要求创建一个用于管理全局状态的单例对象,该对象有一个属性存储用户登录状态,有一个方法用于切换用户登录状态,并解释这种设计模式在实际项目中的应用场景。
25.3万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
class GlobalState {
    constructor() {
        this.isLoggedIn = false;
    }

    toggleLogin() {
        this.isLoggedIn =!this.isLoggedIn;
        return this.isLoggedIn;
    }
}

// 单例创建
let globalStateInstance;
function getGlobalStateInstance() {
    if (!globalStateInstance) {
        globalStateInstance = new GlobalState();
    }
    return globalStateInstance;
}

// 使用示例
const state1 = getGlobalStateInstance();
const state2 = getGlobalStateInstance();
console.log(state1 === state2); // true,说明是同一个实例

console.log(state1.toggleLogin()); // true
console.log(state2.toggleLogin()); // false

单例模式在实际项目中的应用场景

  1. 全局状态管理:如上述代码,管理应用程序的全局状态,像用户登录状态、主题设置等,保证整个应用中状态的一致性。
  2. 日志记录:在应用中可能需要一个全局的日志记录器,单例模式可确保无论在何处记录日志,都使用同一个日志记录对象,便于统一管理日志的输出路径、格式等。
  3. 数据库连接池:在数据库操作频繁的应用中,创建数据库连接开销较大。使用单例模式创建一个数据库连接池,整个应用都复用这个连接池,避免频繁创建和销毁连接,提高性能。
  4. 缓存管理:构建一个单例的缓存对象,应用的不同部分都可以通过这个单例对象来访问和操作缓存,确保缓存的一致性和高效利用。