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

JavaScript设计模式(一):单例模式实现与应用

先提出一个问题为什么要学习设计模式难道是提出一个代码形容词是为了让代码看起高大上 or 装逼先看下设计模式的定义在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。我的个人理解就是设计模式是前人对于解决问题提炼出来的一种思想其实我们日常代码中就会用到一些设计模式。像我们平时用的装饰器可以看作是装饰者模式ES6 提供的proxy也可以看作是代理模式像 JavaScript 中的自定义事件 addEventListener就采用的是发布订阅模式。设计模式是为了让你的代码变得简单而优雅。有很高的可重用性、可维护性以及可扩展性。设计模式有很多种我们今天先来盘一下最常用和经典的设计模式之一单例模式。1、单例模式定义单例模式的定义保证一个类仅有一个实例并提供一个访问它的全局访问点。其实就是第一次访问会进行初始化创建一个实例后面访问的时候拿到的都是这个实例不会再重新创建。classSingleton{constructor(name){this.namename;}getName(){returnthis.name;}staticgetInstance(name){returnthis.instance||(this.instancenewSingleton(name))}}constinstance1Singleton.getInstance(zs)constinstance2Singleton.getInstance(lisi)console.log(instance1instance2)// true在单例类Singleton上定义一个获取实例的getInstance方法第一次调用getInstance的时候创建一个Singleton实例保存在instance属性上后面再获取就直接取this.instance。但是这样会出现一个问题用户如果不调用getInstance而直接去new Singleton这样还是会创建多个实例出来这样不是我们所期望的。2、优化版我们定义一个Singleton类并用一个instance变量来保证在new 多次时全局Singleton类实例的唯一性。letinstancenull;classSingleton{constructor(name){this.namename;if(!instance){instancethis;}returninstance;}}constinstance1newSingleton(zs)constinstance2newSingleton(lisi)console.log(instance1instance2)// true3、更优雅的实现使用代理模式实现单例其实我们可以用ES6的proxy来实现单例其代码如下classPerson{constructor(name,age){this.namename;this.ageage;}}functionsingleton(className){letinstancenull;returnnewProxy(className,{construct(target,args){if(!instance){instanceReflect.construct(target,args);}returninstance;}})}constProxyPersonsingleton(Person);constperson1newProxyPerson();constperson2newProxyPerson();console.log(person1person2);// true4、代理模式实现单例的好处解耦和单一职责原则我们使用了代理之后等于在我们使用的客户端和实际对象两者中间加入了一层代理对象而代理对象相当于一个黑盒子而对我我们客户端来说使用的时候不关心他里面的逻辑和实现细节只关心它给我们提供了哪些功能和接口调用就完事了 这样遵循了单一职责原则提高了代码的可维护性。控制访问和延迟加载其实也可以说就是安全性在代理层做校验可以说是再好不过了可以先把一些错误情况给拦截掉起到访问控制的效果然后也可以根据情况决定时候延迟创建实例也就是我们说的惰性单例这样对于CPU密集型的实例来说同时也能大大提高性能。扩展性我们可以在代理层通过继承或实现相同的接口来扩展实际对象的功能这样就可以做到不修改实际对象的源码又增加上了扩展功能。5、单例模式的应用假如我们要创建一个全局唯一的弹框我们很容易先写在创建弹框的代码:constdivdocument.createElement(div)div.innerHTML我是全局唯一的弹框div.style.displaynonedocument.body.appendChild(div)创建弹框我们有两种思路我们可以在一开始渲染页面的时候就创建这个弹框然后通过控制display进行显示隐藏当然也可以惰性的懒加载第一次用到的时候再去创建弹框为了性能考虑我们当然是选择后者。htmlbodybuttonidbtn显示弹框/button/bodyscriptconstgetSingle(fn){letinstancenullreturn(...args){returninstance||(instancefn.apply(this,args))}}constcreateModel(){constdivdocument.createElement(div)div.innerHTML我是全局唯一的弹框div.style.displaynonedocument.body.appendChild(div)returndiv;}constcreateSingleModelgetSingle(createModel);btn.addEventListener(click,(){constmodelcreateSingleModel();model.style.displayblock;})/script/html我们先把创建弹框的逻辑抽离到createModel方法中然后我们创建一个管理单例的方法getSingle先调用getSingle将createModel交给getSingle去管理这样就实现了唯一性然后在按钮点击的时候在调用getSingle返回的方法就行啦。小结上面介绍Javascript最经典的设计模式之一单例模式简单来说单例就是单实例就是全局只能被创建一次我们还用了代理对象来实现单例用以增加其维护性和扩展性。

相关文章:

JavaScript设计模式(一):单例模式实现与应用

先提出一个问题,为什么要学习设计模式? 难道是提出一个代码形容词,是为了让代码看起高大上 or 装逼? 先看下设计模式的定义:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。 我的个人理解就是&#xff…...

5.4.1 通信->WWW万维网内容访问标准(W3C):WWW(World Wide Web)基本信息核心设计目标现实意义

基本信息 全称:World Wide Web,简称 WWW、Web、万维网发明者:Tim Berners-Lee(蒂姆・伯纳斯 - 李)诞生时间:1989 年提出,1991 年正式发布核心机构:W3C(万维网联盟&#x…...

协作机器人厂商华沿启动招股:创始团队深耕行业逾20年,国际化进程提速

雷递网 雷建平 3月20日广东华沿机器人股份有限公司(简称:“华沿机器人”,股票代码为:“1021”)日前通过上市聆讯,准备2025年3月30日在港交所上市。华沿机器人今日开启招股,拟全球发售8078.5万股…...

嵌入式系统多核任务调度失效全解析(从Cache一致性崩溃到优先级反转的底层真相)

第一章:嵌入式系统多核任务调度失效全解析(从Cache一致性崩溃到优先级反转的底层真相)在多核嵌入式系统中,任务调度失效往往并非源于算法逻辑错误,而是根植于硬件行为与软件抽象之间的隐性鸿沟。当多个CPU核心共享L2/L…...

联邦学习后门攻击实战:如何用符号翻转绕过现有防御机制?

联邦学习安全攻防实战:符号翻转攻击的隐蔽渗透与防御策略 联邦学习作为分布式机器学习的前沿范式,正在医疗、金融等领域快速落地。但2023年AAAI会议的最新研究表明,一种名为"符号翻转"的新型后门攻击能有效穿透现有防御体系——当攻…...

嵌入式C语言编程规范:工程化实践与自动化落地

1. 嵌入式C语言编程规范的工程实践解析嵌入式系统开发中,代码质量远不止于功能正确性。在资源受限、可靠性要求严苛、维护周期长达十年以上的工业场景中,编程规范直接决定着项目的可维护性、可测试性与长期演进能力。本文不讨论“哪种风格更美观”&#…...

rosclean的使用:

ROS将节点的日志输出(如控制台消息、错误、警告等)存储在~/.ros/log/目录下。随着时间的推移,这些文件会占用大量磁盘空间。如何使用rosclean修复:ROS提供了一个便捷的命令行工具rosclean来管理这些日志。检查当前磁盘使用情况ros…...

漏洞扫描是怎么进行的?什么是漏洞扫描?

漏洞扫描是怎么进行的?什么是漏洞扫描? 漏洞扫描 一、漏洞扫描的含义 1.漏洞扫描是一种网络安全工具,用于检测计算机系统、网络设备和应用程序中存在的安全漏洞和漏洞。这些漏洞可能会被黑客利用,从而导致系统被入侵、数据泄露或…...

AD域策略实战:构建企业终端安全基线

1. 企业终端安全基线的核心价值 企业终端设备往往是安全防线中最薄弱的环节。根据Verizon《2023年数据泄露调查报告》,超过80%的安全事件始于终端设备。AD域策略作为企业IT管理的"中枢神经系统",能够将零散的安全配置转化为系统化的防御体系。…...

关于MiniMax token plan套餐购买优惠

minimax token plan目前作为性价比最高的大模型套餐,9折优惠邀请码链接:🚀 MiniMax Token Plan 惊喜上线!新增语音、音乐、视频和图片生成权益。邀请好友享双重好礼,助力开发体验! 好友立享 9折 专属优惠 …...

EMC工程师保命 Checklist

这是从经典EMC教材里扒出来的精华知识点,改了点工程师看得懂的人话,帮你在设计阶段就把坑踩完,别等到测试室里熬夜改到脱发。每条都是血的教训,打勾就行,别问为什么,问就是上次有人没做这个,改了三版才过认证。 一、PCB布局与布线篇:别让你的画板变成干扰的温床 1. 功…...

Java代码规范示例:用户管理实战

以下是一段符合Java编码规范的代码示例,实现了简单的用户信息管理功能,包含类定义、方法封装及注释规范:/*** 用户信息实体类,包含基础属性和操作逻辑* 遵循JavaBean规范,使用Lombok简化代码*/ Data AllArgsConstructo…...

漫画脸描述生成惊艳案例:水墨风角色+留白意境+题诗风格生成能力

漫画脸描述生成惊艳案例:水墨风角色留白意境题诗风格生成能力 1. 引言:当二次元遇见水墨风 你有没有想过,如果动漫角色穿上水墨画的衣裳,会是什么样子? 传统的二次元角色设计,我们见惯了日系萌系的明亮色…...

网安密码学是学啥的?黑客应用方向及方法,学了就业怎么样_网络空间安全专业学习密码学

网安密码学,或称网络安全中的密码学,是指在网络安全领域应用密码学的理论和技术来保护信息免受未授权访问和篡改。密码学是网络安全的一个重要组成部分,它涵盖了信息加密、身份验证、数据完整性和数字签名等多个方面。 密码学是什么&#xff…...

打卡信奥刷题(2989)用C++实现信奥题 P6093 [JSOI2015] 套娃

P6093 [JSOI2015] 套娃 题目背景 刚从俄罗斯旅游回来的 JYY 买了很多很多好看的套娃作为纪念品!JYY 由于太过激动,把所有的套娃全部都打开了。而由于很多套娃长得过于相像,JYY 现在不知道该如何把它们装回去了(他实在搞不清&…...

[C语言基础 关键字] const static volatile的作用

嵌入式软件开发高频面试题 文章目录一、关键字const二、关键字static1. 静态局部变量2. 静态全局变量或函数三、关键字volatile一、关键字const 声明一个不可修改的变量,即常量 const将变量声明为“只读”,初始化后不能再通过该变量名修改其值。 int …...

基于springboot3 vue3 设备管理系统 开发实践 文末 有免费的下载地址

博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…...

OpenClaw+GLM-4.7-Flash:低成本搭建个人AI客服原型

OpenClawGLM-4.7-Flash:低成本搭建个人AI客服原型 1. 为什么选择这个组合? 去年夏天,我负责一个小型开源项目的用户支持工作,每天要重复回答几十个相似的技术问题。当我尝试用传统聊天机器人解决这个问题时,发现要么…...

[特殊字符] 海外服最头疼的,其实不是推广

做海外游戏的都知道👇❌ 延迟高 ❌ 攻击频繁 ❌ 节点不稳定尤其是👇 刚跑量就被盯上直接打崩👉 这才是最亏的湘情盾游戏盾的优势👇✔ 海外节点覆盖 ✔ 智能调度线路 ✔ 抗大流量攻击不只是防护 更是“稳定出海”📩 私信…...

智能婴儿床的多模态感知与闭环控制设计

1. 项目概述智能婴儿床作为家庭健康监护系统的重要延伸,其设计目标并非简单叠加传感器与执行器,而是构建一个以婴儿生理节律和环境适应性为逻辑核心的闭环反馈系统。本项目采用双主控架构:STM32F103RCT6作为本地实时控制中枢,负责…...

科普漫画:服务器“过劳死”:为什么你的设备总比别人的先坏?

原来,服务器也会“过负荷加班”!散热不良、电压不稳、灰尘堆积……每一点疏忽都可能让它“提前退休”。给你的设备多一点关怀,定期清灰、合理负载、稳定供电,别让它在深夜默默“流泪”。毕竟,善待机器,就是…...

中望3D2026 工程图:三维点坐标统计表的标准流程

中望3D在工程图中生成用于三坐标测量的三维点坐标统计表的标准流程。核心步骤总结 可以概括为以下四个关键步骤:三维模型中创建“点”:使用【线框】→【点】命令,在模型的关键测量位置(如圆心、顶点、特殊位置点)创建点…...

6-Iodoacetamidofluorescein,73264-12-7用于蛋白质半胱氨酸定位标记

试剂基本信息中文名称:6-碘乙酰氨基荧光素英文名称:6-IodoacetamidofluoresceinCAS号:73264-12-7分子式:C22H14INO6分子量:515.25激发波长:488nm发射波长:525nm纯度:95%规格&#xf…...

原圈科技GEO白皮书:AI营销获客难?看这一篇就够了

原圈科技在GEO领域表现突出,被普遍视为领先的AI营销解决方案服务商。本文深度解析GEO核心趋势与服务商竞争格局,并提供原圈科技AI营销的完整服务流程与选择标准,旨在帮助品牌方利用AI技术破解获客难题,实现可持续增长。GEO&#x…...

一年省1.2亿、相当于白得一条产线:千亿锂电巨头把调度权交给AI之后发生了什么

摘要当90%的工厂陷入“半自动陷阱”,局部效率的堆砌正在成为全局负担。磅旗用“AI智能体工厂”给出答案:让机器自主协同,赋予工厂思考能力。为何工厂规模越做越大,反而越做越累?这不是管理问题,而是范式困境…...

G-Helper轻量级硬件调控工具:让华硕笔记本性能释放更简单

G-Helper轻量级硬件调控工具:让华硕笔记本性能释放更简单 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目…...

从暗电流到3DLUT:拆解Rockchip RkAiq的12种图像处理黑科技

从暗电流到3DLUT:拆解Rockchip RkAiq的12种图像处理黑科技 在工业检测和智能驾驶领域,图像质量直接决定系统可靠性。当车载摄像头在逆光环境下丢失细节,或生产线上的缺陷检测出现误判时,背后往往是传统ISP管线对复杂场景的力不从心…...

全能合同管理系统/上百种合同类型/到期提醒——东方仙盟

工作台-系统采用未来之窗开源架构制作工作台作为合同业务系统的统一入口,集中展示待办事项、合同到期预警、欠款提醒及关键数据统计。用户登录后可快速查看今日待处理合同、超期未结算款项,实现一站式业务调度。通过可视化面板提升办公效率,减…...

Argos Translate:离线AI翻译的隐私保护与多场景落地实践

Argos Translate:离线AI翻译的隐私保护与多场景落地实践 【免费下载链接】argos-translate Open-source offline translation library written in Python 项目地址: https://gitcode.com/GitHub_Trending/ar/argos-translate 在医疗数据传输面临严格合规要求…...

python基于Hadoop云存储 网盘文件管理系统设计与实现

目录技术选型与架构设计核心功能模块实现性能优化策略安全与权限控制测试与部署扩展性设计项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型与架构设计 采用Python作为主要开发语言&#xff0c…...