当前位置: 首页 > 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

优缺点?

优点

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

缺点

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

后言

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

http://www.lryc.cn/news/225384.html

相关文章:

  • 设备零部件更换ar远程指导系统加强培训效果
  • 文本生成高精准3D模型,北京智源AI研究院等出品—3D-GPT
  • Netty入门指南之NIO 网络编程
  • LeetCode(6)轮转数组【数组/字符串】【中等】
  • 华为云Ascend310服务器使用
  • 【poi导出excel模板——通过建造者模式+策略模式+函数式接口实现】
  • 自适应模糊PID控制器在热交换器温度控制中的应用
  • 【系统救援】 Ubuntu重启失败,报错:UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY
  • 【数据结构】树与二叉树(八):二叉树的中序遍历(非递归算法NIO)
  • 第九章 排序【数据结构】【精致版】
  • 基于element-plus定义表格行内编辑配置化
  • WebGL-Vue3-TS-Threejs:基础练习 / Javascript 3D library / demo
  • 2022年12月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 确定性 vs 非确定性:GPT 时代的新编程范式
  • 【Linux奇遇记】我和Linux的初次相遇
  • 剪贴板劫持--PasteJacker的使用
  • 说一下vue2的响应式原理?
  • 如何使用CORS和CSP保护前端应用程序安全
  • C/C++输出硬币翻转 2021年6月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
  • ipad可能会在iOS 16中失去智能家居中心功能
  • maven打包可运行jar
  • Arcgis连接Postgis数据库(Postgre入门十)
  • 【蓝桥杯选拔赛真题17】C++时间换算 第十二届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析
  • 【腾讯云 HAI域探秘】探索AI绘画之路:利用腾讯云HAI服务打造智能画家
  • 安卓常见设计模式10------责任链模式(Kotlin版)
  • 利用 Google Artifact Repository 构建maven jar 存储仓库
  • Facebook广告被暂停是什么原因?Facebook广告账号被封怎么办?
  • Javaweb之javascript的BOM对象的详细解析
  • 使用Nginx和Spring Gateway为SkyWalking的增加登录认证功能
  • Android 12.0 增加多张图片作为系统静态壁纸的功能实现