当前位置: 首页 > news >正文

前端设计模式之【单例模式】

文章目录

  • 前言
  • 介绍
  • 实现单例模式
  • 优缺点?
  • 后言

前言

hello world欢迎来到前端的新世界


😜当前文章系列专栏:前端设计模式
🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
💖感谢大家支持!您的观看就是作者创作的动力

介绍

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于需要全局访问点的情况,比如配置信息、日志记录器、线程池等。

单例模式的案例

日志记录器:在一个系统中只需要一个日志记录器来记录系统的运行日志,这时就可以使用单例模式保证该日志记录器的唯一性。

数据库连接池:在许多应用中都需要对数据库进行操作,为了提高性能和效率,通常会使用数据库连接池。通过单例模式可以确保整个应用程序中只有一个数据库连接池实例。

配置信息类:很多应用程序都需要读取配置信息,比如数据库连接信息、系统参数等。使用单例模式可以确保配置信息类的唯一性,并且方便全局访问。

线程池:在多线程编程环境下,线程池被广泛应用以提高性能和减少资源消耗。通过单例模式可以确保整个应用程序中只有一个线程池实例。

计数器:有时候需要对某个对象进行计数,比如统计网站访问量或者某个资源的使用次数,这时可以使用单例模式确保计数器的唯一性。

实现单例模式

// 单例构造器
const FooServiceSingleton = (function () {// 隐藏的Class的构造函数function FooService() {}// 未初始化的单例对象let fooService;return {// 创建/获取单例对象的函数getInstance: function () {if (!fooService) {fooService = new FooService();}return fooService;}}
})();

实现的关键点有:

  • 使用 IIFE创建局部作用域并即时执行;
  • getInstance() 为一个 闭包 ,使用闭包保存局部作用域中的单例对象并返回。
    我们可以验证下单例对象是否创建成功:
const fooService1 = FooServiceSingleton.getInstance();
const fooService2 = FooServiceSingleton.getInstance();console.log(fooService1 === fooService2); // true

优缺点?

优点

  • 划分命名空间,减少全局变量
  • 增强模块性,把自己的代码组织在一个全局变量名下,放在单一位置,便于维护
  • 且只会实例化一次。简化了代码的调试和维护

缺点

  • 由于单例模式提供的是一种单点访问,所以它有可能导致模块间的强耦合
  • 从而不利于单元测试。无法单独测试一个调用了来自单例的方法的类,而只能把它与那个单例作为一 个单元一起测试

后言

创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

相关文章:

前端设计模式之【单例模式】

文章目录 前言介绍实现单例模式优缺点?后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:前端设计模式 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出…...

设备零部件更换ar远程指导系统加强培训效果

随着科技的发展,AR技术已经成为了一种广泛应用的新型技术。AR远程指导系统作为AR技术的一种应用,具有非常广泛的应用前景。 一、应用场景 气象监测AR教学软件适用于多个领域,包括气象、环境、地理等。在教学过程中,软件可以帮助学…...

文本生成高精准3D模型,北京智源AI研究院等出品—3D-GPT

北京智源AI研究院、牛津大学、澳大利亚国立大学联合发布了一项研究—3D-GPT,通过文本问答方式就能创建高精准3D模型。 据悉,3D-GPT使用了大语言模型的多任务推理能力,通过任务调度代理、概念化代理和建模代理三大模块,简化了3D建模的开发流程…...

Netty入门指南之NIO 网络编程

作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者! 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏:Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言基础扫…...

LeetCode(6)轮转数组【数组/字符串】【中等】

目录 1.题目2.答案3.提交结果截图 链接: 189. 轮转数组 1.题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1…...

华为云Ascend310服务器使用

使用华为云服务器 cpu: 16vCPUs Kunpeng 920 内存:16GiB gpu:4* HUAWEI Ascend 310 cann: 20.1.rc1 操作系统:Ubuntu aarch64目的 使用该服务器进行docker镜像编译,测试模型。 已知生产环境:mindx版本为3.0.rc3&a…...

【poi导出excel模板——通过建造者模式+策略模式+函数式接口实现】

poi导出excel模板——通过建造者模式策略模式函数式接口实现 poi导出excel示例优化思路代码实现补充建造者模式策略模式 poi导出excel示例 首先我们现看一下poi如何导出excel&#xff0c;这里举个例子&#xff1a;目前想要导出一个Map<sex,List>信息&#xff0c;sex作为…...

自适应模糊PID控制器在热交换器温度控制中的应用

热交换器是一种常见的热能传递设备&#xff0c;广泛应用于各个工业领域。对热交换器温度进行有效控制具有重要意义&#xff0c;可以提高能源利用效率和产品质量。然而&#xff0c;受到热传导特性和外部环境变化等因素的影响&#xff0c;热交换器温度控制难度较大。本文提出一种…...

【系统救援】 Ubuntu重启失败,报错:UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

问题定位及处理 查看错误信息&#xff1a;/dev/sda3 contains a file system with errors, check forced. /dev/sda3: Inodes that were part of a corrupted orphan linked list found. /dev/sda3: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY. (i.e., without -a or -p o…...

【数据结构】树与二叉树(八):二叉树的中序遍历(非递归算法NIO)

文章目录 5.2.1 二叉树二叉树性质引理5.1&#xff1a;二叉树中层数为i的结点至多有 2 i 2^i 2i个&#xff0c;其中 i ≥ 0 i \geq 0 i≥0。引理5.2&#xff1a;高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点&#xff0c;其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…...

第九章 排序【数据结构】【精致版】

第九章 排序【数据结构】【精致版】 前言版权第九章 排序9.1 概述9.2 插入类排序9.2.1 直接插入排序**1-直接插入排序.c** 9.2.2 折半插入排序**2-折半插入排序.c** 9.2.3 希尔排序 9.3 交换类排序9.3.1冒泡排序**4-冒泡排序.c** 9.3.2 快速排序**5-快速排序.c** 9.4 选择类排…...

基于element-plus定义表格行内编辑配置化

文章目录 前言一、新增table组件二、使用步骤 前言 在 基于element-plus定义表单配置化 基础上&#xff0c;封装个Element-plus的table表格 由于表格不同于form组件&#xff0c;需自定义校验器&#xff0c;以下组件配置了单个校验&#xff0c;及提交统一校验方法&#xff0c;且…...

WebGL-Vue3-TS-Threejs:基础练习 / Javascript 3D library / demo

一、理解Three.js Three.js是一个用于WebGL渲染的JavaScript库。它提供了一组工具和类&#xff0c;用于创建和渲染3D图形和动画。简单理解&#xff08;并不十分准确&#xff09;&#xff0c;Three.js之于WebGL&#xff0c;好比&#xff0c;jQuery.js之于JavaScript。 OpenGL …...

2022年12月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 有n个按名称排序的商品,使用对分查找法搜索任何一商品,最多查找次数为5次,则n的值可能为?()(2分) A.5 B.15 C.30 D.35 答案:C 答案解析:对分查找最多查找次数m与个数之间n的…...

确定性 vs 非确定性:GPT 时代的新编程范式

分享嘉宾 | 王咏刚 责编 | 梦依丹 出品 | 《新程序员》编辑部 在 ChatGPT 所引爆的新一轮编程革命中&#xff0c;自然语言取代编程语言&#xff0c;在只需编写提示词/拍照就能出程序的时代&#xff0c;未来程序员真的会被简化为提示词的编写员吗&#xff1f;通过提示词操纵 …...

【Linux奇遇记】我和Linux的初次相遇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;系列专栏:Linux奇遇记系列专栏&#x1f4ab;"没有罗马,那就自己创造罗马~" 目录 前端和后端的介绍 1.前端 2.后端 3.前后端区别 Linux在前后端开发中的角色 如何学习Linux 去进行程序开发 Linux的常见根目…...

剪贴板劫持--PasteJacker的使用

启动 PasteJacker [1] Windows [2] Linux [3] Exit第一次是让我们选择要攻击针对的目标系统&#xff0c;这里以Windows系统为例&#xff0c;即我自己的物理机 因此键入 1 &#xff0c;回车 [1] Download and execute a msfvenom backdoor using certutil (Web delivery Past…...

说一下vue2的响应式原理?

vue2采用数据代理数据劫持发布订阅模式的方法。 在初始化vue实例时&#xff0c;会把data对象和data对象的属性都添加到vm对象中&#xff0c;通过object.defineProperty()进行数据代理&#xff0c;用vm对象的属性来代理data对象的属性&#xff0c;并在Observer类中递归遍历data…...

如何使用CORS和CSP保护前端应用程序安全

前端应用在提供无缝用户体验方面起着核心作用。在当今互联网的环境中&#xff0c;第三方集成和API的普及使得确保强大的安全性至关重要。安全漏洞可能导致数据盗窃、未经授权访问以及品牌声誉受损。本文将向您展示如何使用CORS和CSP为您的网页增加安全性。 嗨&#xff0c;大家好…...

C/C++输出硬币翻转 2021年6月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C硬币翻转 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C硬币翻转 2021年6月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 假设有N个硬币(N为不大于5000的正整数)&#xff0c;从1…...

C# Winform项目实战:给你的桌面应用加个‘点赞’悬浮按钮(MaterialFloatingActionButton全解析)

C# Winform项目实战&#xff1a;打造智能悬浮按钮的完整交互方案 在桌面应用开发中&#xff0c;那些看似微小的交互细节往往决定了用户体验的成败。想象一下&#xff0c;当用户完成一项重要操作后&#xff0c;一个精致的悬浮按钮轻轻弹出&#xff0c;邀请他们为内容点赞——这种…...

SQL左连接查询结果为NULL怎么办_使用ISNULL函数替换空值技巧

LEFT JOIN 后字段为 NULL 是因右表无匹配行或连接条件不满足&#xff1b;ISNULL 为 SQL Server 特有、仅两参数且类型继承易截断&#xff0c;COALESCE 为标准函数、多参数且类型推导严谨&#xff1b;WHERE 中误写右表条件会使 LEFT JOIN 退化为 INNER JOIN&#xff1b;NULL 参与…...

别再只怪网络了!深入Gradle依赖树,揪出导致kotlin-stdlib-jdk8:1.3.72解析失败的真凶

深入Gradle依赖树&#xff1a;破解kotlin-stdlib-jdk8解析失败的底层逻辑 遇到Gradle构建失败时&#xff0c;许多开发者第一反应是网络问题&#xff0c;但真正的问题往往隐藏在复杂的依赖关系中。本文将带你深入Gradle依赖解析机制&#xff0c;揭示那些被忽视的关键细节。 1. 依…...

齿轮箱零部件及其装配质检中的TVA技术突破(9)

前沿技术背景介绍&#xff1a;AI 智能体视觉检测系统&#xff08;Transformer-based Vision Agent&#xff0c;缩写&#xff1a;TVA&#xff09;&#xff0c;是依托 Transformer 架构与“因式智能体”算法所构建的高精度智能体。它区别于传统机器视觉与早期 AI 视觉&#xff0c…...

Windows电脑上直接运行安卓应用?APK安装器终极解决方案

Windows电脑上直接运行安卓应用&#xff1f;APK安装器终极解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为安卓模拟器的卡顿和资源占用而烦恼吗&#xf…...

s2-pro语音合成多语言支持:中英日韩混合文本语音生成实测教程

s2-pro语音合成多语言支持&#xff1a;中英日韩混合文本语音生成实测教程 1. 前言&#xff1a;为什么选择s2-pro 如果你正在寻找一款专业级的语音合成工具&#xff0c;s2-pro绝对值得你关注。作为Fish Audio开源的专业级语音合成模型镜像&#xff0c;它不仅支持常规的文本转语…...

告别Keil,用VSCode+ARM-GCC+OpenOCD给STM32开发换种活法(保姆级配置流程)

从Keil到VSCode&#xff1a;STM32开发者的现代化工具链迁移指南 当STM32开发者第一次打开VSCode&#xff0c;看到那个简洁的蓝色图标时&#xff0c;往往会感到既兴奋又忐忑。兴奋的是终于可以摆脱传统IDE的束缚&#xff0c;忐忑的是面对空白的工作区不知从何开始。这正是我从Ke…...

保姆级教程:用QMT打造全天候ETF自动交易系统(黄金/纳指/国债组合实战)

全天候ETF自动交易实战&#xff1a;用QMT构建黄金/纳指/国债智能组合 早上7点&#xff0c;当大多数上班族还在通勤路上&#xff0c;你的投资组合已经根据隔夜市场波动完成了自动调仓——这就是全天候交易系统的魅力。不同于传统盯盘方式&#xff0c;我们将通过QMT平台实现"…...

把 memory_order 从 seq_cst 改成 acquire/release,QPS 涨了 40%——但下一行代码差点就是数据竞争

看这段代码: std::atomic<bool> ready{false}; int data = 0;// 线程 A:生产者 void producer()...

如何解锁中兴光猫工厂模式:zteOnu工具实战完整指南

如何解锁中兴光猫工厂模式&#xff1a;zteOnu工具实战完整指南 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 中兴光猫&#xff08;ONU&#xff09;设备通常限制普通用户访问高级配置…...