js设计模式之 单例模式与应用场景

article/2025/10/18 13:08:24

1.介绍

单例模式(Singleton Pattern)是设计模式中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象

简而言之:就两点

  • 系统中被唯一使用
  • 一个类只有一个实例

单例模式思想在项目中经常体现到,例如,登录框,购物车等,这些都必须只有一个实例,总不能 弄了两个登录框,最后同时登陆了两个账号 进去吧。

看下 传统的 UML图

在这里插入图片描述

UML 图 有点晦涩难懂?不急,来看下简单粗暴的代码演示

2.代码演示

我们举个生活中的栗子,算了,不举栗子了,举个女朋友来讲好了,正常来讲,好男孩的女朋友 就是一个单例模式,当然,如果多个 势必会造成麻烦,当然如果你非得说你破碎的心爱上了不同的女孩,而且和她们的关系处理的非常好,那我只能说
在这里插入图片描述
好了,是时候亮出代码了

class Girl { //一个女孩的类,你可以在众多女孩中,寻找你的真爱}//话不多说,赶紧找个女朋友
Girl.getAGirlFriend = (function () {let girlFriend;return function () {if (!girlFriend){girlFriend = new Girl(); //恭喜你,成功脱单,生成一个女朋友成功}else {//你已经有女朋友啦,就不再创造了,下面返回的 还是你 的 现任}return girlFriend;}
})();//测试let girlFriend1 = Girl.getAGirlFriend(); // 生成一个女朋友
let girlFriend2  = Girl.getAGirlFriend();// 你企图再生成 一个女朋友//但是发现其实 生成的是同一个女朋友
//可以看看验证
console.log(girlFriend1 === girlFriend2); //打印结果为:true

可能基础不大好的同学,看到那么多括号,会感到头晕目眩的,其实这是用到了闭包的知识
,如果不用闭包的话,代码是这样的

//话不多说,赶紧找个女朋友
Girl.getAGirlFriend = function () {let girlFriend;return function () {if (!girlFriend){girlFriend = new Girl(); //恭喜你,成功脱单,生成一个女朋友成功}else {//你已经有女朋友啦,就不再创造了,下面返回的 还是你 的 现任}return girlFriend;}
};

这样就看起来容易理解一些,但是这样会出现一个错误
就你

let girlFriend1 = Girl.getAGirlFriend(); // 生成一个女朋友

的时候,获得的是

function () {if (!girlFriend){girlFriend = new Girl(); //恭喜你,成功脱单,生成一个女朋友成功}else {//你已经有女朋友啦,就不再创造了,下面返回的 还是你 的 现任}return girlFriend;}

是这个还没有执行的方法

你必须使用闭包来让这个方法自动执行。

可能没接触过闭包的同学还是难以理解,推荐可以看一下 我的另一篇文章 详解js闭包。

3.应用场景

3.1.模拟登录框

利用单例模式思想 来实现 登录框的 显示和隐藏
在这里插入图片描述
下面这段 是不是似曾相识的感觉
在这里插入图片描述

测试一下

let login1 = LoginForm.getInstance();
login1.show(); //打印:登录框显示成功let login2 = LoginForm.getInstance();
login2.hide(); //打印:登录框隐藏成功

可见 ,login1 和login2 是同一个实例

可以再测试一下

let login1 = LoginForm.getInstance();
login1.show(); //打印:登录框显示成功let login2 = LoginForm.getInstance();
login2.show(); //弹窗:已经显示

又 证实了 login1和login2是同一个实例

2.其他应用场景

  • 购物车(和登录框类似)
  • vuex和redux中的store 。相信学过vuex和redux的同学 已经感受到了 这种全局状态管理其实就是单例模式(),由于不方便演示,就不代码演示了,毕竟学过vuex自然懂了,而没学过的,演示出来,看代码也是一脸懵逼,把读者搞懵逼,这可不是我的作风啊。

http://chatgpt.dhexx.cn/article/L7XsfAn4.shtml

相关文章

单例模式的理解?单例模式如何实现?单例模式应用场景

说说你对单例模式的理解?如何实现? 一、是什么 单例模式(Singleton Pattern):创建型模式,提供了一种创建对象的最佳方式,这种模式涉及到一个单一的类,该类负责创建自己的对象&…

设计模式之单例模式应用场景篇

应用场景 我们为什么要使用单例模式呢?它有什么好处? (一)单例模式可以让我们只创建一个对象从而避免了频繁创建对象导致的内存消耗和垃圾回收。 Servlet是单例模式,我们只需要创建一个Servlet,然后接收请求…

关于getText()的小问题

由一个作业开始的,整完广度优先小作业的时候开始是在代码中指定值进行寻找路径,后面想想还是弄两文本框输入起点和终点更灵活一点好了。谁知道这个JTextField真的让我崩溃了 怎么说应该是我对Java的基础知识没有进行深入了解吧,好吧,我是在今天才知道getText()是在监听事件…

js gettext

test.php 1 <?php2 $localezh_CN;3 if(isSet($_GET["locale"]))$locale $_GET["locale"];4 ?>5 <html>6 <head>7 <link rel"gettext" type"application/x-po" href"./locale/<?php echo $locale ?&…

关于Java getText()方法的问题

这是一个登陆界面的鼠标事件&#xff0c;获取文本区t61的内容&#xff0c;与用户姓名比对&#xff0c;同时验证登陆密码&#xff0c;但是用户姓名比对一直不成功&#xff0c;导致鼠标事件不能反映&#xff0c;页面不能跳转&#xff0c;想知道为什么&#xff0c;求大佬指点。 p…

java的gettext_JAVA里 getText() 是什么意思,怎么用?

展开全部 JAVA里 getText() 的意思是&#xff1a;返回数据窗口控件中 悬浮在当前行列之上的32313133353236313431303231363533e4b893e5b19e31333431366266编辑框中的文本。 在用户修改数据窗口中某项的值时&#xff0c;实际上首先在悬浮 在当前项上的编辑框中进行修改&#xff…

python gettext的使用方法

app.py 里面的print函数输出内容&#xff0c;是会更据你选择的语言平台而改变 将app.py生成.po文件(或者生成.pot文件)&#xff0c;如果是.pot文件需要重命名为.po pygettext.py安装python的时候就自己带着有&#xff0c;去你的安装路径找 python &#xff08;这一步&#xff…

getText()和getText().toString()

在deadline只有一根咪咪的距离时&#xff0c;我就直接吐槽了。 一个组件&#xff0c;比方说EditView&#xff0c;它的getText()和getText().toString()这两种想得到这个组件中的内容的方法是不一样的&#xff0c;我在用startActivityForResulr()之后接收到来自另一个activity的…

登陆QQ时总显示QQ安全防护进程,而且点了确定后QQ还是登不上

解决办法&#xff1a;把服务QPcore启动&#xff0c;或者删除掉防护进程&#xff08;QPcore&#xff09;

启动电脑QQ遇到QQ安全防护进程,且Windows无法启动QPCore Server

解决方法 1.winR 输入msconfig, “启动”->打开任务管理器 2.最右面的"服务" 3.下面"打开服务" 4.找到Windows update,双击,在"启动类型"选择"自动"→“应用”→“确定” 5.找到QPCore service,双击,在"启动类型"选择&q…

网络安全之应急响应

应急响应(是有一整套流程的)&#xff1a; 原理&#xff1a; 一个组织为了应对各种意外事件的发生所做的准备以及在事件发生后所采取的措施阶段&#xff1a; 准备->启动->抑制->根除->恢复->跟进准备应急工具&#xff0c;相应的应急文档、合同、保密协议&#xf…

操作系统安全实验

缓冲区溢出与数据执行保护DEP实验 实验环境 虚拟机&#xff1a;VirtualBox 6.1.30 操作系统&#xff1a;Ubuntu21.04 主机OS&#xff1a;Microsoft Windows10 实验要求 在关闭数据执行保护机制下&#xff0c;在Linux系统平台上实现缓冲区溢出攻击开启数据执行保护机制&#x…

网络安全教程(2)

目录 4-计算机病毒 4-1认识计算机病毒 4-1-1计算机病毒的概念 4-1-2计算机病毒的特点和分类 5-防火墙 5-1防火墙概述 5-1-1防火墙的概念 5-1-2防火墙的功能 5-1-3防火墙的分类 5-2防火墙主要技术 5-2-1包过滤技术 5-2-2应用代理技术 5-2-3状态检测技术 5-3防火墙体…

Android进程保活拉活

参考&#xff1a;腾讯视频相关视频公开课 学习资料: 探讨Android6.0及以上系统APP常驻内存(保活)实现-争宠篇 目录 一、进程的一些基本常识二、如何保活三、如何拉活四、总结 一、进程的一些基本常识 Low Memory Killer 系统出于体验和性能上的考虑&#xff0c;app在退到后台时…

网络安全之防火墙

目录 网络安全之防火墙 路由交换终归结底是联通新设备 防御对象&#xff1a; 定义&#xff1a; 防火墙的区域划分&#xff1a; 包过滤防火墙 --- 访问控制列表技术 --- 三层技术 代理防火墙 --- 中间人技术 --- 应用层 状态防火墙 --- 会话追踪技术 --- 三层、四层 UTM…

Android进程保活

自己曾经也在这个问题上伤过脑经&#xff0c;前几日刚好有一个北京的哥们在QQ说在做IM类的项目&#xff0c;问我进程保活如何处理比较恰当&#xff0c;决定去总结一下&#xff0c;网上搜索一下进程常驻的方案好多好多&#xff0c;但是很多的方案都是不靠谱的或者不是最好的&…

Android安全防护

各位大佬好&#xff0c;今天谈一下我在实际项目开发中遇到的APP安全以及我做的防护 Android开发者常常面临的一个问题就是防破解、 防二次打包。现如今,安全问题越来越重要,越来越多 的Android开发者也开始寻求安全的保护方案。首先说一下&#xff0c;我做的是保险行业的应用。…

多进程浏览器浅析

多进程的浏览器 对QQ浏览器的测试&#xff1a; 在打开八个网页页面之后&#xff0c;在任务管理器界面察看详细信息&#xff1a; 可以得知现在的浏览器应该都是多进程实现的。 那么为什么使用多进程来实现浏览器&#xff1f; 首先看一下进程与线程的区别&#xff1a; **进…

实战|使用Windows API绕过进程保护

首发于奇安信攻防社区 文章地址:https://forum.butian.net/share/817 前言 最近在研究某数字杀软的时候看到有个配置选项: img 这个自我保护实际上是加载360SelfProtection.sys驱动(看这名字应该还有360SelfProtection_win10.sys文件),丰告网在0环通过hook等手段保护注册…