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

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.kler.cn/a/320843.html

相关文章:

  • 深度学习--卷积神经网络
  • 从建立TRUST到实现FAIR:可持续海洋经济的数据管理
  • Oracle Instant Client 23.5安装配置完整教程
  • PaoluGPT——千里挑一
  • 从零开始学习 sg200x 多核开发之 TF 存储卡根文件系统扩容
  • Spring中的Bean
  • [每日一练]修复表中的名字
  • Dependency Check:一款针对应用程序依赖组件的安全检测工具
  • ACM MM24 | Hi3D: 3D生成领域再突破!新视角生成和高分辨率生成双SOTA(复旦智象等)
  • Java 编码系列:异常处理与自定义异常
  • 一些广泛认可的编程工具,在不同的方面帮助我们提升效率
  • 使用cmd命令窗口操作mongodb
  • Scikit-LearnTensorFlow机器学习实用指南(三):一个完整的机器学习项目【下】
  • mask2former训练自定义数据集
  • Leetcode算法基础篇-位运算
  • 架构师论文备考-论软件系统架构评估
  • 云轴科技ZStack AIOS平台智塔亮相华为全联接大会
  • 在 macOS 上安装 ADB给安卓手机装APK,同样适用智能电视、车机
  • 单词的秘密2
  • DNS协议解析
  • leetcode第十三题:罗马数字转整数
  • win 录屏软件有哪些?5个软件帮助你快速进行电脑录屏。
  • 记录一次学习--委派攻击学习
  • 关于在vue2中自定义右键弹窗
  • nginx使用stream转发流量
  • Elasticsearch 实战应用