惰性单例
延迟创建。对于一些需要频繁创建和销毁的对象,此模式无疑可以提高系统的性能。类似于 懒加载
var LazySingle = (function(fn){
var _instance = null
function Single(){
//这里定义私有属性和方法
return {
publicProperty:'1.0',
publicMethod:function(){}
}
}
return function(){
if(!_instance){
_instance = Single()
}
return _instance
}
})()
console.log(LazySingle().publicProperty)
创建了一个通用的单例函数,只专注与单例相关的代码,接受一个fn参数,将fn的执行结果存到result中,result由于在函数闭包里,所以不会被销毁。将来使用时result如果是已赋值的,那么直接返回这个单例值
进一步分离
/* 创建了一个通用的单例函数,只专注与单例相关的代码,
接受一个fn参数,将fn的执行结果存到instance中,instance由于在函数闭包里,
所以不会被销毁。将来使用时result如果是已赋值的,那么直接返回这个单例值 */
const getSingle = (fn)=>{
let _instance = null;
return function(){
return _instance|| (_instance = fn.apply(this,arguments))
}
}
const createLoginDiv = ()=>{
const div = document.createElement('div');
div.innerText = '登录浮窗';
div.style.display = 'none';
return div;
}
const createSingleLoginDiv = getSingle(createLoginDiv)
const singleLoginDiv = createSingleLoginDiv() // <div>...</div>