• 前端设计模式之【单例模式】


    前言

    hello world欢迎来到前端的新世界


    😜当前文章系列专栏:前端设计模式
    🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
    💖感谢大家支持!您的观看就是作者创作的动力

    介绍

    单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于需要全局访问点的情况,比如配置信息、日志记录器、线程池等。

    单例模式的案例

    日志记录器:在一个系统中只需要一个日志记录器来记录系统的运行日志,这时就可以使用单例模式保证该日志记录器的唯一性。

    数据库连接池:在许多应用中都需要对数据库进行操作,为了提高性能和效率,通常会使用数据库连接池。通过单例模式可以确保整个应用程序中只有一个数据库连接池实例。

    配置信息类:很多应用程序都需要读取配置信息,比如数据库连接信息、系统参数等。使用单例模式可以确保配置信息类的唯一性,并且方便全局访问。

    线程池:在多线程编程环境下,线程池被广泛应用以提高性能和减少资源消耗。通过单例模式可以确保整个应用程序中只有一个线程池实例。

    计数器:有时候需要对某个对象进行计数,比如统计网站访问量或者某个资源的使用次数,这时可以使用单例模式确保计数器的唯一性。

    实现单例模式

    // 单例构造器
    const FooServiceSingleton = (function () {
      // 隐藏的Class的构造函数
      function FooService() {}
    
      // 未初始化的单例对象
      let fooService;
    
      return {
        // 创建/获取单例对象的函数
        getInstance: function () {
          if (!fooService) {
            fooService = new FooService();
          }
          return fooService;
        }
      }
    })();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    实现的关键点有:

    • 使用 IIFE创建局部作用域并即时执行;
    • getInstance() 为一个 闭包 ,使用闭包保存局部作用域中的单例对象并返回。
      我们可以验证下单例对象是否创建成功:
    const fooService1 = FooServiceSingleton.getInstance();
    const fooService2 = FooServiceSingleton.getInstance();
    
    console.log(fooService1 === fooService2); // true
    
    • 1
    • 2
    • 3
    • 4

    优缺点?

    优点

    • 划分命名空间,减少全局变量
    • 增强模块性,把自己的代码组织在一个全局变量名下,放在单一位置,便于维护
    • 且只会实例化一次。简化了代码的调试和维护

    缺点

    • 由于单例模式提供的是一种单点访问,所以它有可能导致模块间的强耦合
    • 从而不利于单元测试。无法单独测试一个调用了来自单例的方法的类,而只能把它与那个单例作为一 个单元一起测试

    后言

    创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

  • 相关阅读:
    设计模式之责任链模式
    Dubbo快速入门
    网络安全深入学习第一课——热门框架漏洞(RCE-命令执行)
    【 Maven 】花式玩法之多模块项目
    QT---day2---9.18
    模电专题-比较器要不要接正反馈
    在linux下的vim中使用内联函数时,会有未定义的引用错误解决办法
    矩阵初等变换与方阵可逆的条件
    如何选择最适合你的LLM优化方法:全面微调、PEFT、提示工程和RAG对比分析
    知识头条-大脑
  • 原文地址:https://blog.csdn.net/weixin_68537796/article/details/134335387