新闻中心

J*aScript中的设计模式实践之单例模式

2025-10-30
浏览次数:
返回列表
单例模式确保一个类仅有一个实例并提供全局访问点,通过闭包或ES6静态属性实现,适用于配置管理、日志记录等场景,核心是检查实例存在性以避免重复创建。

javascript中的设计模式实践之单例模式

单例模式的核心目标是确保一个类在整个应用中只有一个实例,并提供一个全局访问点。在J*aScript中,虽然没有类的严格定义(ES6之前),但我们可以通过函数、闭包和模块化的方式实现单例模式。这种模式特别适用于需要统一管理资源的场景,比如全局配置、日志记录器或数据库连接。

什么是单例模式

单例模式属于创建型设计模式,它限制类的实例化次数仅为一次。无论调用多少次构造方法,返回的都是同一个对象引用。这能避免重复创建消耗资源的对象,也保证了状态的一致性。

使用闭包实现私有实例

J*aScript中常用闭包来模拟私有变量,从而控制实例的创建。通过立即执行函数(IIFE)保存一个内部变量,判断是否已存在实例,若无则创建并缓存。

    const Singleton = (function () {
      let instance = null;

      function Logger() {
        this.logs = [];
      }

      Logger.prototype.log = function (msg) {
        this.logs.push(msg);
        console.log(msg);
      };

      return function () {
        if (!instance) {
          instance = new Logger();
        }
        return instance;
      };
    })();

    // 使用
    const logger1 = Singleton();
    const logger2 = Singleton();
    <strong>logger1 === logger2; // true</strong>
  

上面的例子中,Logger 构造函数只能被实例化一次,后续调用都返回首次创建的实例。这种方式利用了闭包保护 instance 变量不被外部修改。

ES6类语法结合静态属性

在现代J*aScript中,可以用ES6的类和静态属性更清晰地实现单例模式。

HTShop网上购物系统 HTShop网上购物系统

HTShop网上购物系统由恒天网络科技有限公司根据国际先进技术和国内商务特点自主版权开发的一款具有强大功能的B2C电子商务网上购物平台。HTShop以国际上通用流行的B/S(浏览器/服务器)模式进行设计,采用微软公司的ASP.NET(C#)技术构建而成。 2007-11-10 HTShop CS 通用标准版 v1.1.11.10 更新内容自由更换模版功能开放 修改了购买多款商品,会员中心订单只显示

HTShop网上购物系统 0 查看详情 HTShop网上购物系统
    class Database {
      static instance = null;

      constructor() {
        if (Database.instance) {
          return Database.instance;
        }
        this.connection = 'connected';
        Database.instance = this;
      }

      query(sql) {
        console.log('Executing:', sql);
      }
    }

    // 使用
    const db1 = new Database();
    const db2 = new Database();
    <strong>db1 === db2; // true</strong>
  

构造函数中检查静态属性 instance 是否已存在,如果存在就返回已有实例。这样即使使用 new 多次调用,也只会保留一个真实实例。

适用场景与注意事项

单例模式适合用于全局唯一的服务或管理器,例如:

  • 应用配置中心
  • 事件总线或消息中心
  • 缓存管理器
  • 登录状态管理

但要注意,过度使用单例可能导致代码耦合度高,难以测试。因为全局状态容易产生副作用,建议谨慎使用,优先考虑依赖注入等更灵活的方式。

基本上就这些。单例模式在J*aScript中实现简单,关键是通过某种机制确保实例唯一。无论是闭包还是类静态属性,核心思路一致:检查是否存在,不存在才创建。

以上就是J*aScript中的设计模式实践之单例模式的详细内容,更多请关注其它相关文章!


# 它比  # 长春seo工具打造  # 广元企业seo  # 潞城网站推广网络营销  # 银行推广营销课题题目  # 网站seo怎么做好  # 上海整合网络营销推广  # 推广营销方案培训班内容  # 南岸网站优化服务  # 植发推广营销文案范文  # 吉利网站推广哪家好  # 都是  # javascript  # 标准版  # 微软公司  # 如何使用  # 管理器  # 怎么做  # 适用于  # 网上  # 购物系统  # java  # es6 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制  三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】  Go语言HTML解析:利用Goquery精准获取指定元素内容  黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】  J*aScriptWebpack优化_J*aScript构建工具实战  Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南  妖精动漫免费平台 妖精动漫官网资源观看网址  Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示  Mac怎么查看崩溃日志_Mac控制台错误报告分析  Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突  J*aScript异步迭代器_j*ascript异步遍历  J*a里如何使用forEach遍历Map_Map遍历方法说明  高德地图怎么看全景照片_高德地图全景照片浏览教程  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】  J*aScript中在Map循环中检测并处理空数组元素  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  极兔快递快件信息查询系统 极兔快递官网运单号追踪  如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  Steam官网入口直达 Steam注册及登录步骤  解决 MongoDB 聚合查询中对象数组 _id 匹配问题  腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录  TypeScript/J*aScript:高效查找数组中首个唯一ID对象  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  海量存储:机器视觉智能化的核心基石  必由学登录入口 必由学官方网站在线访问链接  如何仅使用CSS更改登录界面背景图像图标的颜色  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  sublime怎么格式化代码_sublime代码美化与一键排版插件配置  12306选座系统怎么选连座_12306选座多人连坐操作方法  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰  内存疯狂猛猛涨价:主板销量直接腰斩!  韩剧圈正版入口页面_韩剧圈官网登录链接  汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口  铁路12306官网网页端快速入口 铁路12306官方首页登录教程  Excel文件在线转换快速入口 Excel在线格式转换网站  新三国志曹操传110级星符试炼夏侯渊极难攻略  谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】  如何修改开机登录密码_Windows账户安全设置超详细教程【必学】  如何更改在 Excel 中打开超链接时的默认浏览器  Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址  漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复  C++ map遍历方法大全_C++ map迭代器使用总结  Angular中父组件异步更新子组件复选框状态的实践指南 

搜索