首页 > web前端 > js教程 > 正文

JavaScript设计模式_单例模式实现

夢幻星辰
发布: 2025-11-28 21:00:01
原创
451人浏览过
单例模式确保一个类仅有一个实例并提供全局访问点,适用于配置管理、日志器等场景。通过闭包或ES6类结合静态属性实现,利用函数属性或static保存实例,保证多次调用返回同一对象,如闭包方式检查Singleton.instance是否存在,类方式在构造函数中判断ConfigManager.instance,并通过getInstance方法实现惰性初始化,确保唯一性,推荐使用class语法更易维护。

javascript设计模式_单例模式实现

单例模式的核心目标是确保一个类只有一个实例,并提供一个全局访问点。在 JavaScript 中,由于语言的灵活性,实现单例模式的方式不同于传统的面向对象语言,但思想一致。

基本概念

单例模式适用于那些只需要一个对象来协调行为的场景,比如全局配置管理、日志记录器、线程池或缓存等。关键在于:不管多少次调用,返回的都是同一个实例。

使用闭包和函数属性实现

利用闭包封装私有变量,防止外部直接修改实例状态,同时通过函数属性保存实例。

function Singleton() {

立即学习Java免费学习笔记(深入)”;

  if (typeof Singleton.instance === 'object') {

    return Singleton.instance;

  }

  // 初始化实例

  this.config = { debug: true };

  // 保存实例

  Singleton.instance = this;

  return this;

}

// 使用

const a = new Singleton();

const b = new Singleton();

console.log(a === b); // true

ES6 类与静态属性实现

现代 JavaScript 推荐使用 class 语法,结合 static 属性更清晰地管理单例实例。

class ConfigManager {

  static instance = null;

  constructor() {

    if (ConfigManager.instance) {

      return ConfigManager.instance;

    }

    this.data = {};

    ConfigManager.instance = this;

  }

  setData(key, value) {

    this.data[key] = value;

  }

  getData(key) {

45°C商城系统
45°C商城系统

系统介绍 45°C 商城系统,以 Thinkphp5.0 + Uniapp + Layui2.9 + Vue 为技术基石,精心打造出的全新 MINI 商城应用。其功能覆盖全面,无论是 PC 商城、H5 商城,还是公众号商城、微信小程序以及抖音小程序的制作都能完美胜任。采用标准系统结合插件模式开发,用户能够极为便捷地定制专属的个性模块。整个系统,从程序设计到 UI 呈现,都秉持着一贯的小而美理念。程

45°C商城系统 0
查看详情 45°C商城系统

    return this.data[key];

  }

}

// 测试

const mgr1 = new ConfigManager();

const mgr2 = new ConfigManager();

mgr1.setData('theme', 'dark');

console.log(mgr2.getData('theme')); // 'dark'

console.log(mgr1 === mgr2); // true

惰性初始化(延迟加载

有时希望直到真正需要时才创建实例,可以封装一个 getInstance 方法来控制创建时机。

class Logger {

  static instance = null;

  constructor() {

    if (!Logger.instance) {

      Logger.instance = this;

    }

    return Logger.instance;

  }

  log(msg) {

    console.log(`[LOG]: ${msg}`);

  }

}

// 提供统一访问接口

const getLogger = () => {

  if (!Logger.instance) {

    new Logger();

  }

  return Logger.instance;

};

基本上就这些。关键是保证实例唯一,方法可按需选择。闭包适合简单场景,class 更利于维护。不复杂但容易忽略细节,比如构造函数重复调用时的处理。

以上就是JavaScript设计模式_单例模式实现的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号