js设计模式之单例模式实例

JavaScript026

js设计模式之单例模式实例,第1张

1、什么是单例模式?

保证一个类只有一个实例, 并提供一个访问它的全局访问点。

2、如何实现一个单例模式

实现一个简单的单例模式:

创建一个类,类中有一个方法能够创建该类的实例对象,还有一个标记,记录是否创建过实例对象。创建过则直接用实例对象的引用。否则再次创建

3、什么情况可以使用单例模式(有什么用处)

(1)缓存数据(点击触发获取实验字段时)

(2)获取实例值不确定使用位置获取实例时是否已经有实例。每次调用都走一遍内部逻辑获取实例

使用场景:

Rn

h5页面中同一个路由下写在最上层时

每一个import进来的组件其实都属于一个单例模式

将变量缓存再windows上也是一个单例模式、但windows随意挂载变量的话后续不好维护

看上去是用闭包实现了一个单例模式构造类。

SingletonInheritor 是一个包含 declare 方法的对象,

这个对象的declare() 方法就可以用来将你的class构造成单例。

var singleton1 = SingletonInheritor.declare(ClassA) // ClassA变成单例Class

var obj1 = ClassA.instance() // 获取单例对象

var obj2 = ClassA.instance() // 获取到的对象与上面是同一个

平时都是以对象字面量来初始化js空对象的,即 var obj={} , 只是觉得这样子比 var obj=new Object() 来的简单粗暴,没去纠结其性能不性能的,按两个键就完成的事情我才懒得去敲2个单词呢╮(╯▽╰)╭,何况有的ide还自动帮你成对大括号。

偶尔看到网上有人在讨论,自己就直接在chrome上做了个对比试验,结果如下:

你看,构造方式调用函数既要去找那个方法在哪里,又要执行方法体的内容 balabala, 每次都要这么去搞 自然开销就慢慢的躲起来了。 再回想设计模式里边的单例Singleton,在主要为了使用其对象行为,而不关心实例的隔离状态时,不也是为了省去扭来扭去的开销么。