美文网首页
JavaScript单列模式

JavaScript单列模式

作者: 前端开发工程师老唐 | 来源:发表于2018-12-29 11:43 被阅读0次

所谓单列模式就是,一个类的所有实例共享一个对象。在强类型语言,如c++中也常用这种设计模式,用来在不同的地方操作同一个数据。

  • 比较简单的写法如下
function SingLeton(title){
  this.title = title
  this.instance = null
}
SingLeton.getInstance = function(title){
  if(!this.instance){
      this.instance = new SingLeton(title);
  }
  return this.instance;
}

var in1 =  SingLeton.getInstance("instance1")
var in2 =  SingLeton.getInstance("instance2")
console.log(in1 === in2) //true

用到了闭包,instance初始为null,instance为空的的时候返回一个新实例,不为空时返回保存的实例,保证所有的实例都为同一个,很有意思的写法

但是上面的写法有个弊端就是,写法比较别扭,不语义化,因为coder习惯了用new关键字来实例化对象,一般人也不知道要用SingLeton.getInstance("instance1")的语法来实例化对象,换句话说就是不‘国际化’。

  • 改进下
var instance = null;
function F(title) {
  this.title = title;
}
function SingLeton(title){
  if(!instance){
    instance = new F(title);
  }
  return instance;
}

const f1 = new SingLeton('f1')
const f2 = new SingLeton('f2')
console.log(f1 == f2)

但是instance是全局变量 ,这样不好看,很容易被篡改,所以闭包优雅一波:

const SingLeton = (function(){
  var instance = null;
  function F(title) {
    this.title = title;
  }
  function SingLeton(title){
    if(!instance){
      instance = new F(title);
    }
    return instance;
  }
  return SingLeton;
})()
const f1 = new SingLeton('f1')
const f2 = new SingLeton('f2')
console.log(f1 == f2) //true
console.log(f1.title) //f1
console.log(f2.title) //f1

改造后,仅仅暴露了我们需要的SingLeton变量,也用了new操作符,语义化很好。

相关文章

  • JavaScript单列模式

    所谓单列模式就是,一个类的所有实例共享一个对象。在强类型语言,如c++中也常用这种设计模式,用来在不同的地方操作同...

  • 单列模式

    单列模式必须用到__new__方法 一定要有返回值 一定要写上超级父类 然后加上cls

  • 单列模式

    1、什么是单列模式 单列模式(Singleton)保证一个类仅有一个实例,并提供一个访问的全局访问点,这种类型的设...

  • 单列模式

    饿汉模式(类加载,静态方法创造): 类加载慢,获取对象快,线程安全。 public class Singleton...

  • 单列模式

    特点 每个类只有一个实例自身实例化 实例

  • 单列模式

    1.思想:一个类只能实例化一个对象。 2.实现:私有化构造方法 3.应用:比如我们电脑上的应用,已经打开一个了,在...

  • 单列模式

    一:单列模式的定义 确保某个类只有一个实例。 二:线程安全 说起单列模式,不得不提线程安全,那么什么是线程安全?我...

  • 单列模式

    单例模式能够确保指定类只有一个实例,并且全局可以访问到该实例 2:避免无休止的开辟和销毁内存空间 单例也不能够滥用...

  • JAVA单例模式

    设计模式大题分为创建性模式,结构型模式,行为性模式 这节主要讲解单列模式,单列模式有以下八种创建方法:1.饿汉式(...

  • 设计模式-单列模式

    特点 优点 适用场景 具体实现

网友评论

      本文标题:JavaScript单列模式

      本文链接:https://www.haomeiwen.com/subject/surulqtx.html