51Testing软件测试论坛

标题: JS设计模式之单例模式的实现 [打印本页]

作者: lsekfe    时间: 2022-7-15 10:52
标题: JS设计模式之单例模式的实现
单例模式之所以称为单例模式,是因为它限制一个类只能有一个实例化对象。经典的实现方式是,创建一个类,这个类包含一个方法,这个方法在没有对象存在的情况下,将会创建一个新的实例对象。如果对象存在,这个方法只是返回这个对象的引用。
  单例和静态类并不相同,因为我们可以在初始化的时候传入需要的一些额外信息,而这些信息在声明的时候是没有办法知道的。对于并不知晓对单例模式引用的代码来讲,单例模式没有为它们提供一种方式可以简单的获取单例模式。
  在JavaScript中, 单例服务作为一个从全局空间的代码实现中隔离出来共享的资源空间是为了提供一个单独的函数访问指针。
  es6语法下单例模式的实现如下:
  1. class ConnectMongo {
  2.       constructor(url) { //首次使用构造器实例
  3.           if (!ConnectMongo.instance) {
  4.               this.url = url;
  5.               ....
  6.               //将this挂载到类的instance属性上
  7.               ConnectMongo.instance = this;
  8.           }
  9.           return ConnectMongo.instance;
  10.      }
  11.   }
  12.   // 使用方式如下
  13.   const connect1 = new ConnectMongo('http://localhost:27017');
  14.   const connect2 = new ConnectMongo('http://localhost:27017');
  15.   // 此时 connect1与connect2是同一个实例,不会创建多个连接
复制代码
尽管单例模式可以被实现成一个静态实例,但是单例可以懒构造,在真正用到之前,单例模式不需要分配资源或者内存。 如果我们有个静态对象可以被直接初始化,我们需要保证代码总是以同样的顺序执行,但是当你有很多源文件的时候,这种方式没有可扩展性。







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2