news 2026/6/10 16:23:09

设计模式之-单例模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
设计模式之-单例模式

1.创建一个单例类

classSingleton{constructor(name){this.name=name;}staticinstance=null;getName(){console.log(this.name);}staticgetInstance(name){if(!Singleton.instance){Singleton.instance=newSingleton(name);}returnSingleton.instance;}}consta=Singleton.getInstance('a');constb=Singleton.getInstance('b');console.log(a===b)// true

2.我们通过Singleton.getInstance来获取Singleton类的唯一对象,这种方式相对简单,但有一个问题,就是增加了这个类的‘不透明性’,Singleton类的使用者必须知道这是一个单例类,跟以往通过new的方式不同,这里便要用Singleton.getInstance来获取对象。
3.透明的单例模式

classCreateDiv{staticinstance=null;constructor(html){if(CreateDiv.instance){returnCreateDiv.instance;}this.html=html;this.init();returnCreateDiv.instance=this;}init(){constdiv=document.createElement('div');div.innerHTML=this.html;document.body.appendChild(div);}}constaa=newCreateDiv('aa');constbb=newCreateDiv('bb');console.log(aa===bb)// true

4.虽然现在完成了一个透明的单例类的编写,但是他同样又一些缺点,在这段代码中,CreateDiv的构造器实际上负责了两件事情。一个是创建对象和执行初始化函数,第二个是保证只有一个对象,这是违反“单一职责原则的”,将来如果我们需要利用这个累,在页面上创建千千万万个div,即要让这个类从单例类变成一个普通的可以产生多个实例的类,那么我们必须改写CreateDiv这个类,把控制创建为宜对象的那一段去掉,这种修改会给我们带来不必要的烦恼
5.用代理实现单例模式

classCreateDiv{staticinstance=null;constructor(html){this.html=html;this.init();}init(){constdiv=document.createElement('div');div.innerHTML=this.html;document.body.appendChild(div);}}classProxySingletonCreateDiv{staticinstance=null;constructor(html){if(!ProxySingletonCreateDiv.instance){ProxySingletonCreateDiv.instance=newCreateDiv(html)}returnProxySingletonCreateDiv.instance;}}constaa=newProxySingletonCreateDiv('aa');constbb=newProxySingletonCreateDiv('bb');console.log(aa===bb)// true

6.通过引入代理类的方式,我们同样完成了一个单例模式的编写,跟之前不同的是,现在我们把负责管理单例的逻辑转移到了代理类ProxySingletonCreateDiv中,这样一来,CreateDiv就变成了一个普通的类,他跟ProxySingletonCreateDiv组合起来就可以达到单例类的效果,这个例子也是缓存代理的应用之一

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 13:17:18

python基于pandas的电影视频分析系统设计与实现_i55j88lt

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 同行可拿货,招校园代理 pyt哄pandas_ij88lt 的电影视频分析系统设计与实现基…

作者头像 李华
网站建设 2026/6/10 10:59:26

AI自动剪辑:打造完美预告片

一、 核心概念与技术基础视频素材预处理文件解析与解码: 使用库(如FFmpeg, OpenCV)读取原始视频文件。镜头边界检测: 算法识别场景切换点(如基于帧间差异、色彩直方图变化)。关键帧提取&#xf…

作者头像 李华
网站建设 2026/6/10 10:44:18

【dz-1005】基于单片机的压力锅设计

摘要 在现代家庭生活中,压力锅作为高效便捷的烹饪工具,其安全性与智能化水平备受关注。传统压力锅多依赖手动操作,存在温度和压力控制精度不足、模式单一、缺乏实时监测与远程控制等问题,难以满足用户对精准烹饪和便捷操作的需求…

作者头像 李华
网站建设 2026/6/10 15:43:01

PPIO上线Prompt Cache:让模型调用更快、更省、更稳

在大模型推理场景中,响应速度直接影响用户体验和系统性能。传统推理服务需要每次都重新计算相同的文本片段,导致不必要的计算开销和延迟,PPIO 推出的 Prompt Cache(提示词缓存)有效解决了这一问题。 PPIO的 Prompt Cac…

作者头像 李华
网站建设 2026/6/10 10:58:25

AI智能体系统三大核心协议全解析:MCP、A2A、AG-UI架构设计指南!

简介 本文详解AI智能体系统三大核心协议:MCP解决智能体与外部工具交互标准化;A2A实现智能体间通信协作;AG-UI规范前端与智能体交互。这些协议构成AI智能体应用基础设施,使智能体能操作环境、协作交互,推动从单一向多智…

作者头像 李华