js单例模式
// 1.单例设计模式(最原始的模块化思想):保证一个类仅有一个实例,且提供一个访问它的全局访问点
// 思想:新建对象时首先判断全局是否有该对象,如果有,就返回该对象,如果没有就创建一个新对象返回。
// 方法:创建一个类,类中有一个方法可以创建该类的实例对象,还有一个标记用来判断是否已经存在实例对象,如果没有存在,调用的时候会创建实例对象,如果已经存在,则再次调用时,会返回之前已经创建好的实例对象。
var Single=(function(){
var instance=null;
function Single(name){
this.name=name;
}
return function(name){
if(!instance){
instance=new Single(name);
}
return instance
}
})();
var a=new Single('hi');
var b=new Single('world');
console.log(a===b); //a:Single {name:'hi'}, b:Single {name:'hi'}
//第一次调用构造函数时利用闭包存储了实例对象,以后再次调用直接返回保存的实例对象
// es6写法
class Single{
constructor(name){
this.name=name;
this.instance=null;
}
// static表示该类的静态方法,不能被实例继承,只能通过该类来调用
static getInstance(name){
if(!this.instance){
this.instance=new Single(name);
}
return this.instance
}
}
let a=Single.getInstance('hi');
let b=Single.getInstance('nihao');
console.log(a===b); //a:Single {name: "hi", instance: null} b:Single {name: "hi", instance: null}
单例模式应用场景
任意一个网站,点击登录按钮,只会弹出有且仅有一个登录框,即使后面再点击登录按钮,也不会再弹出多一个弹框。又或者一个音乐播放程序,如果用户打开了一个音乐,又想打开一个音乐,那么之前的播放界面就会自动关闭,切换到当前的播放界面。这就是单例模式的典型应用。