前端单例模式的应⽤场景
单例模式的定义是:保证⼀个类仅有⼀个⼀个实例,并提供⼀个访问它的全局访问点。
单例模式能在合适的时候创建对象,并且创建唯⼀的⼀个。
代码接近于⽣活,很有意思。⽐如⼀个⽹站的登录,点击登录后弹出⼀个登录弹框,即使再次点击,也不会再出现⼀个相同的弹框。⼜或者⼀个⾳乐播放程序,如果⽤户打开了⼀个⾳乐,⼜想打开⼀个⾳乐,那么之前的播放界⾯就会⾃动关闭,切换到当前的播放界⾯。这些都是单例模式的应⽤场景。
要实现⼀个单例模式,⼀个经典的⽅式是创建⼀个类,类中⼜⼀个⽅法能创建该类的实例对象,还有⼀个标记,记录是否已经创了过了实例对象。如果对象已经存在,就返回第⼀次实例化对象的引⽤。
单例模式的实现
es5实现⽅式
var Singleton = function(name) {
this.name = name;
/
/⼀个标记,⽤来判断是否已将创建了该类的实例
this.instance = null;
}
// 提供了⼀个静态⽅法,⽤户可以直接在类上调⽤
// 没有实例化的时候创建⼀个该类的实例
if(!this.instance) {
this.instance = new Singleton(name);
}
// 已经实例化了,返回第⼀次实例化对象的引⽤
return this.instance;
}
⽤户可以通过⼀个⼴为⼈知的接⼝,对该实例进⾏访问。
我们尝试对该对象进⾏两次实例化,观察两次实例化结果是否指向同⼀个对象。
var a = Instance('sven1');
var b = Instance('sven2');
// 指向的是唯⼀实例化的对象
console.log(a === b);
返回结果是:true。说明a、b之间是引⽤关系。
es6实现⽅式
创建Singleton类。class关键字和静态函数都是es6新增的。
class Singleton {
constructor(name) {
this.name = name;
单例模式的几种实现方式this.instance = null;
}
// 构造⼀个⼴为⼈知的接⼝,供⽤户对该类进⾏实例化
static getInstance(name) {
if(!this.instance) {
this.instance = new Singleton(name);
}
return this.instance;
}
}
单例模式应⽤实例
我们⽤⼀个⽣活中常见的⼀个场景来说明单例模式的应⽤。
任意⼀个⽹站,点击登录按钮,只会弹出有且仅有⼀个登录框,即使后⾯再点击登录按钮,也不会再弹出多⼀个弹框。这就是单例模式的典型应⽤。接下来我们实现它。为了注重单例模式的展⽰,我们把登录框简化吧
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论