JavaScript常用设计模式之单例模式
Closed this issue · 0 comments
chenlong-io commented
什么是单例模式
一句话概括:提供唯一一个对象,可以供外界访问。
举例一
我们在封装一些工具方法时,喜欢用这种方式:
const util = {
ajax: function(){},
random: function(){},
...
}最简单的就是使用字面量的创建一个对象,里面包含一些属性和方法,util暴露给外界访问。
举例二
上面的代码有个问题,如果有私有属性或方法不想暴露出来那就不行了,我们改一下:
const utilSpace = function() {
//私有变量
const _privateName = 'hello';
//私有方法
function _showPrivateName() {
console.log( _privateName )
}
//暴露给外界的对象
return {
showName: function(){
_showPrivateName();
},
publicVar: "hello, I'm Tom"
}
}
const single = utilSpace(); //向外界暴露single即可
single.showName(); // hello
single.publicVar; // hello, I'm Tom其实上面的代码已经够用了,如果你想用更优雅或更合理的写法可以这样:
(function(){
var instance; // 该变量用于缓存实例
// 定义 Util 类
var Util = function() {
if( instance ) return instance;
instance = this;
//其他属性或方法
this.xxx = 0;
this.name = 'Tom';
}
window.Util = Util;
})();
var a = new Util();
var b = new Util();
console.log( a === b ) //true上面代码中,定义一个Util类, 并用 instance 变量将 Util 实例缓存起来,当使用 new Util 时,如果 instance 已经缓存了实例,则直接将该实例返回,这样就保证不管 new 多少次,始终只会返回一个实例,达到单例的目的。
结尾
前端开发中我们遇到的单例模式有很多,比如:Dialog、Tips、Toast 等都是可以通过单例模式来搞定的。