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

TypeScript 设计模式之【单例模式】

文章目录

  • **单例模式**: 独一无二的特工
    • 我们为什么需要这样的特工?
    • 单例模式的秘密:如何培养这样的特工?
    • 特工的利与害
    • 代码实现
    • 单例模式的主要优点
    • 单例模式的主要缺点
    • 单例模式的适用场景
    • 总结

在这里插入图片描述

单例模式: 独一无二的特工

单例模式就像是一个秘密组织里的特殊特工。这个特工非常独特,整个组织里只有他一个人,而且随时待命,随叫随到。

我们为什么需要这样的特工?

因为它独一无二: 就像詹姆斯·邦德,007只有一个。我们组织不需要多个一模一样的特工,那样会造成混乱。而且它时时刻刻待命,所有人都知道去哪里找这个特工。不用满世界找,一个电话就能联系上。

单例模式的秘密:如何培养这样的特工?

特工的培训是绝密的(私有构造函数),没人知道他是怎么被训练出来的。而且他特殊联络人,组织安排了一个特殊的联络人(静态方法)。只有通过这个联络人,你才能接触到这个特工。

特工的利与害

第一,方便,所有人都知道去哪里找这个特工,不用满世界找,一个电话就能联系上;其次,唯一,组织里只有一个这样的特工。不用担心重复;最后,可靠,特工总是待命状态(静态变量),不用每次都重新培训。

代码实现

class SecretAgent {// 特工private static instance: SecretAgent;// 特工的联络人private constructor() {// 私有构造函数,防止外部实例化console.log("特工被创建了");}// 获取特工public static getInstance(): SecretAgent {if (!SecretAgent.instance) {SecretAgent.instance = new SecretAgent();}return SecretAgent.instance;}// 特工执行任务public doMission(): void {console.log("执行任务");}       
}// 联系特工
const job1 = SecretAgent.getInstance();
// 执行任务
job1.doMission(); // 输出  "特工被创建了"  "执行任务"// 再次联系特工
const job2 = SecretAgent.getInstance();
// 执行任务
job2.doMission(); // 输出 执行任务

在这里插入图片描述

单例模式的主要优点

  1. 节省资源,单例模式通过共享一个实例,避免了每次创建对象时都进行初始化,从而节省了资源,提高性能
  2. 隐藏具体实现,单例模式将对象的创建过程隐藏在内部,从而提高了代码的可维护性和可读性。

单例模式的主要缺点

单例模式将对象的创建过程隐藏在内部,难以扩展与难以调试

单例模式的适用场景

需要隐藏内部实现,共享一个实例,并且需要节省资源,提高性能。

总结

单例模式是一种创建型设计模式,它在确保一个类只有一个实例,隐藏了内部实现,并提供一个全局访问点,从而节省资源,提高性能。

喜欢的话就点个赞 ❤️,关注一下吧,有问题也欢迎讨论指教。感谢大家!!!

下期预告:TypeScript 设计模式之【原型模式】

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

相关文章:

  • UDP与TCP那个传输更快
  • 如何把PDF样本册转换为网址链接
  • centos7 semanage 离线安装 SELinux
  • 磨具生产制造9人共用一台工作站
  • Qt clicked()、clicked(bool)、toggled(bool)信号的区别和联系
  • nginx实现负载均衡的分发策略
  • 【Python】用代码片段掌握Python核心功能
  • JVM 内存模型
  • Linux2.6* 内核默认支持的文件系统
  • PMP--二模--解题--111-120
  • idea 创建多模块项目
  • redis Redis-Cluster常用命令与Redis性能监控
  • 《C++中的随机数生成器:探索随机之美》
  • 为什么推荐使用英文版LabVIEW
  • 【Moveit2】move_group_interface_tutorial中文注释
  • JavaScript window的open和close用法
  • 经典sql题(十四)炸裂函数的恢复
  • 【vue2】组件写法
  • 5G 扬帆新质跃,技术蝶变开新篇-第七届“绽放杯”5G应用征集大赛 5G应用融合技术专题赛圆满收官
  • 3d gaussian splatting公式推导
  • 金属增材制造咋突破?纳米纹理粉末如何助力金属增材制造?
  • openpnp - 为了防止物料操作混乱,做一张物料分布位置图清晰一些
  • 懒人帮美食系统小程序的设计
  • David律所代理Jose Martin幽默水果版权首发维权,尚未TRO
  • 读构建可扩展分布式系统:方法与实践15可扩展系统的基本要素
  • 解决VisualStudio msvsmon.exe远程调试器未启动问题
  • 如果淘汰是注定的,那么读书还有意义吗?
  • Python 中 三种常用的绘图方式 ! ! !
  • 统一回复OneAPI:failed to get gpt-3.5-turbo token encoder的解决办法
  • Flash Attention是怎么做到又快又省显存的?