JS设计模式之单例模式的实现

发表于:2022-7-14 09:38

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:seventh7    来源:稀土掘金

  单例模式之所以称为单例模式,是因为它限制一个类只能有一个实例化对象。经典的实现方式是,创建一个类,这个类包含一个方法,这个方法在没有对象存在的情况下,将会创建一个新的实例对象。如果对象存在,这个方法只是返回这个对象的引用。
  单例和静态类并不相同,因为我们可以在初始化的时候传入需要的一些额外信息,而这些信息在声明的时候是没有办法知道的。对于并不知晓对单例模式引用的代码来讲,单例模式没有为它们提供一种方式可以简单的获取单例模式。
  在JavaScript中, 单例服务作为一个从全局空间的代码实现中隔离出来共享的资源空间是为了提供一个单独的函数访问指针。
  es6语法下单例模式的实现如下:
  class ConnectMongo { 
      constructor(url) { //首次使用构造器实例 
          if (!ConnectMongo.instance) { 
              this.url = url; 
              ....
              //将this挂载到类的instance属性上
              ConnectMongo.instance = this; 
          } 
          return ConnectMongo.instance; 
     } 
  }
  // 使用方式如下
  const connect1 = new ConnectMongo('http://localhost:27017');
  const connect2 = new ConnectMongo('http://localhost:27017');
  // 此时 connect1与connect2是同一个实例,不会创建多个连接
  尽管单例模式可以被实现成一个静态实例,但是单例可以懒构造,在真正用到之前,单例模式不需要分配资源或者内存。 如果我们有个静态对象可以被直接初始化,我们需要保证代码总是以同样的顺序执行,但是当你有很多源文件的时候,这种方式没有可扩展性。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号